日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

APP设计与开发(ui篇)

發(fā)布時(shí)間:2023/12/24 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 APP设计与开发(ui篇) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇文章是我個(gè)人在開發(fā)與設(shè)計(jì)APP的所用的一些設(shè)計(jì)思路,僅用于和大家分享知識(shí)并不是什么設(shè)計(jì)標(biāo)準(zhǔn)之類的。主要說明App的開發(fā)中是如何來開發(fā)與組織UI部分。

UI模塊結(jié)構(gòu)

在項(xiàng)目中建立ui包用于存放ui類文件。這是第一步第二步是建立相應(yīng)的組件包名: activityfragmentwidgetadapterwidget等以上是最基本的組件現(xiàn)在ui結(jié)構(gòu)如下:

基類設(shè)計(jì)

base存放ui通用的部分,結(jié)構(gòu)如下:

UIDelegate

定義一些常用的UI操作如: ToastDialog獲取Resources等功能。

public   interface UIDelegate {

        Toast makeToast(String msg, int len);

        void showToastShort(String msg);

        void showToastLong(String msg);

        void showToastShort(@StringRes int msg);

        void showToastLong(@StringRes int msg);

        Dialog showWaitDialog(@StringRes int msg);

        Dialog showWaitDialog(String  msg);

        Dialog showWaitDialog(@NonNull String msg, boolean cancelable, @Nullable DialogInterface.OnCancelListener callback);

        Dialog showWaitDialog(@StringRes int msg, boolean cancelable, @Nullable DialogInterface.OnCancelListener callback);

        void    dismissWaitDialog();
    }

BaseActivity

繼承Activity實(shí)現(xiàn)最基本的功能如打印生命周期獲取參數(shù)BaseActivity實(shí)現(xiàn)UIDelegate提供最基本的ToastDialog顯示功能部分代碼如下:

public abstract class BaseActivity extends AppCompatActivity implements UIDelegate{



    private static final String ACTIVITY_LIFE_CYCLE_TAG = "activity_life_cycle";
    private static final String LOG_FORMAT = "%s: %s";

    private ProgressDialog     mWaitDialog;

    // activity life cycle start
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LianLianLog.d(ACTIVITY_LIFE_CYCLE_TAG, LOG_FORMAT, this.getLocalClassName(), "onCreate");
        ActivityStack.getActivityStack().addActivity(this);

    }


    @SuppressWarnings("unchecked")
    public <T> T getExtra(String key, T defaultValue){
        Bundle bundle = getIntent().getExtras();
        if(bundle != null &&  bundle.containsKey(key)){
            return (T) bundle.get(key);
        }
        return defaultValue;
    }

    @SuppressWarnings("unchecked")
    public <T> T getExtra(String key){
        Bundle bundle = getIntent().getExtras();
        if(bundle != null &&  bundle.containsKey(key)){
            return (T) bundle.get(key);
        }
        return null;
    }


     @Override
     public Toast makeToast(String msg, int len) {
         if(TextUtils.isEmpty(msg))
             return null;

         return Toast.makeText(this, msg, len);
     }

     @Override
     public void showToastShort(String msg) {
         Toast toast =  makeToast(msg, Toast.LENGTH_SHORT);
         if(toast != null)
             toast.show();
     }

     @Override
     public void showToastLong(String msg) {
         makeToast(msg, Toast.LENGTH_LONG).show();
         Toast toast =  makeToast(msg, Toast.LENGTH_LONG);
         if(toast != null)
             toast.show();
     }

     @Override
     public void showToastShort(@StringRes int msg) {
          showToastShort(getString(msg));
     }

     @Override
     public void showToastLong(@StringRes int msg) {
         showToastLong(getString(msg));
     }

     @Override
     public Dialog showWaitDialog(@StringRes int msg) {
         return showWaitDialog(getString(msg));
     }

     @Override
     public Dialog showWaitDialog(String msg) {
         return showWaitDialog(msg, false, null);
     }

    @Override
    public Dialog showWaitDialog(@NonNull String msg, boolean cancelable, @Nullable DialogInterface.OnCancelListener callback) {

        if(mWaitDialog == null) {
            mWaitDialog = ProgressDialog.show(this, null, msg, true, cancelable, callback);
            mWaitDialog.setCanceledOnTouchOutside(false);
        }else{
            mWaitDialog.setMessage(msg);
            mWaitDialog.show();
        }
        return mWaitDialog;
    }

    @Override
    public Dialog showWaitDialog(@StringRes int msg, boolean cancelable, @Nullable DialogInterface.OnCancelListener callback) {
        return showWaitDialog(getString(msg), cancelable, callback);
    }
    @Override
     public void dismissWaitDialog() {
        if(mWaitDialog != null)
            mWaitDialog.dismiss();

        mWaitDialog = null;
     }
 }

BaseFragment

同樣也實(shí)現(xiàn)UIDelegate接口但是他的功能其實(shí)是由BaseActivity去完成的部分代碼如下:


public class BaseFragment extends Fragment implements UIDelegate {

    private static final String FRAGMENT_LIFE_CYCLE_TAG = "fragment_life_cycle";
    private static final String LOG_FORMAT = "%s: %s";

    private  UIDelegate mDelegate;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        LianLianLog.d(FRAGMENT_LIFE_CYCLE_TAG, LOG_FORMAT, getLogTag(), "onAttach");

        if(context instanceof UIDelegate)
            mDelegate = (UIDelegate) context;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        LianLianLog.d(FRAGMENT_LIFE_CYCLE_TAG, LOG_FORMAT, getLogTag(), "onActivityCreated");

    }

    @SuppressWarnings("unchecked")
    public <T> T getExtra(String key, T defaultValue){
        Bundle bundle = getArguments();
        if(bundle != null &&  bundle.containsKey(key)){
            return (T) bundle.get(key);
        }
        return defaultValue;
    }

    @SuppressWarnings("unchecked")
    public <T> T getExtra(String key){
        Bundle bundle = getArguments();
        if(bundle != null &&  bundle.containsKey(key)){
            return (T) bundle.get(key);
        }
        return null;
    }

    private String getLogTag() {
        return getTag() != null ? getTag() : getClass().getSimpleName();
    }

    @Override
    public Toast makeToast(String msg, int len) {
        return mDelegate != null ? mDelegate.makeToast(msg, len) : null;
    }

    @Override
    public void showToastShort(String msg) {
        if(mDelegate != null)
            mDelegate.showToastShort(msg);
    }

    @Override
    public void showToastLong(String msg) {
        if(mDelegate != null)
            mDelegate.showToastLong(msg);
    }

    @Override
    public void showToastShort(@StringRes int msg) {
        if(mDelegate != null)
            mDelegate.showToastShort(msg);
    }

    @Override
    public void showToastLong(@StringRes int msg) {
        if(mDelegate != null)
            mDelegate.showToastLong(msg);
    }

    @Override
    public Dialog showWaitDialog(@StringRes int msg) {
        return mDelegate != null ? mDelegate.showWaitDialog(msg) : null;

    }

    @Override
    public Dialog showWaitDialog(String msg) {
        return mDelegate != null ? mDelegate.showWaitDialog(msg) : null;
    }

    @Override
    public Dialog showWaitDialog(@NonNull String msg, boolean cancelable, @Nullable DialogInterface.OnCancelListener callback) {
        return mDelegate != null ? mDelegate.showWaitDialog(msg, cancelable, callback) : null;
    }

    @Override
    public Dialog showWaitDialog(@StringRes int msg, boolean cancelable, @Nullable DialogInterface.OnCancelListener callback) {
        return mDelegate != null ? mDelegate.showWaitDialog(msg, cancelable, callback) : null;
    }

    @Override
    public void dismissWaitDialog() {
        if(mDelegate != null)
            mDelegate.dismissWaitDialog();
    }
}

UIConstant

定義ActivityFragment通信時(shí)所用到的一些常量參數(shù)。

public class UIConstant {
    
    String EXTRA_NAME = "extra_name";
    String EXTRA_PHONE = "extra_phone";
}

UIHelper

包含一系列的輔助方法如在多人開發(fā)過程中你寫了一個(gè)Activity但是要啟動(dòng)這個(gè) Activity必需要帶一些參數(shù)由于是個(gè)人開發(fā)的別人也不清楚如何去調(diào)用這里推薦在UIHelper中聲明如何去啟動(dòng)這個(gè)Activity

public class UIHelper {
    public static void startInfoActivity(Context context,String phone){
        Intent  intent = new Intent(context, InfoActivity.class);
        intent.putExtra(UIConstant.EXTRA_PHONE, phone);
        intent.setPackage(context.getPackageName());
        context.startActivity(intent);
    }
   public static boolean   sdkCompare(int sdkInt){
        return Build.VERSION.SDK_INT >= sdkInt;
    }
    public static boolean   isDestroyed(Activity activity){
        if(UIHelper.sdkCompare(Build.VERSION_CODES.JELLY_BEAN_MR1)){
            return activity.isDestroyed();
        }
        return activity.isFinishing();
    }
}

使用MVP

使用MVP開發(fā)模式隔離業(yè)務(wù)與模型減少View的代碼。讓View實(shí)現(xiàn)UIDelegate這樣Presenter具備顯示ToastDialog等功能。

public interface IView extends UIDelegate{

}


《架構(gòu)文摘》每天一篇架構(gòu)領(lǐng)域重磅好文,涉及一線互聯(lián)網(wǎng)公司應(yīng)用架構(gòu)(高可用、高性 能、高穩(wěn)定)、大數(shù)據(jù)、機(jī)器學(xué)習(xí)等各個(gè)熱門領(lǐng)域。

總結(jié)

以上是生活随笔為你收集整理的APP设计与开发(ui篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。