<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      解析AndroidProject 對(duì)話框案例 dialog

      “但愿人長(zhǎng)久,搬磚不再有”,輪子哥的座右銘。然后我卻把AndroidProject功能解析出來(lái),是為了更好的搬磚,我想他看到是不是會(huì)當(dāng)場(chǎng)吐血。??

      對(duì)于對(duì)話框案例,我已經(jīng)很難只是把代碼貼出來(lái),方便其他項(xiàng)目使用。整理了上方的導(dǎo)圖,一個(gè)MessageDialog牽扯到的全部文件。這里更多的是,我們要學(xué)習(xí)里面一些代碼處理的點(diǎn),以及封裝方式。我們也許可以用一個(gè)Java文件和xml布局文件實(shí)現(xiàn)的事情,卻用這么多代碼實(shí)現(xiàn)的意義和好處。但考慮這些的前提都是,學(xué)習(xí)他的代碼。

      兩個(gè)layout結(jié)合顯示完整的效果 layout.addView 

      結(jié)合上方導(dǎo)圖,可以看到有兩個(gè)文件 R.layout.ui_dialog 和R.layout.message_dialog。內(nèi)容分別是:

      R.layout.ui_dialog

      R.layout.message_dialog

      實(shí)際顯示效果

      結(jié)合方式 CommonDialog 56行

      public B setCustomView(View view) {
           mContainerLayout.addView(view, 1);
           return (B) this;
      }

      通過(guò)MessageDialog調(diào)用CommonDialog內(nèi)方法進(jìn)行把內(nèi)容的布局 addView 進(jìn)去,這樣其他的彈出框只是內(nèi)容不同,標(biāo)題和按鈕部分相同,以達(dá)到復(fù)用的效果。

       

      CardView

      ui_dialog.xml 布局中使用了控件 CardView 來(lái)實(shí)現(xiàn) Dialog 圓角效果。帶圓角背景和陰影FrameLayout。并且在CardView中使用 ImageView 可以直接顯示圓角圖片

      參考博客:Android之CardView  (Ps:寫的真的很好)

        核心屬性

      背景顏色

          app:cardBackgroundColor="@color/white"

       圓角半徑

          app:cardCornerRadius="15dp"

      陰影大小

          app:cardElevation="0px"

       

      SmartTextView 自定義View

      可根據(jù)內(nèi)容自定義顯示和隱藏的控件

      package com.hjq.widget.view;
      
      import android.content.Context;
      import android.text.TextUtils;
      import android.util.AttributeSet;
      
      import androidx.appcompat.widget.AppCompatTextView;
      
      /**
       *    author : Android 輪子哥
       *    github : https://github.com/getActivity/AndroidProject
       *    time   : 2019/08/18
       *    desc   : 自動(dòng)顯示和隱藏的 TextView
       */
      public final class SmartTextView extends AppCompatTextView {
      
          public SmartTextView(Context context) {
              this(context, null);
          }
      
          public SmartTextView(Context context, AttributeSet attrs) {
              this(context, attrs, android.R.attr.textViewStyle);
          }
      
          public SmartTextView(Context context, AttributeSet attrs, int defStyleAttr) {
              super(context, attrs, defStyleAttr);
          }
      
          @Override
          public void setText(CharSequence text, BufferType type) {
              super.setText(text, type);
              // 判斷當(dāng)前有沒(méi)有設(shè)置文本達(dá)到自動(dòng)隱藏和顯示的效果
              if (TextUtils.isEmpty(text) && getVisibility() != GONE) {
                  setVisibility(GONE);
                  return;
              }
      
              if (getVisibility() != VISIBLE) {
                  setVisibility(VISIBLE);
              }
          }
      }

       

      @drawable/transparent_selector

      確定、取消按鈕的按壓樣式

      <?xml version="1.0" encoding="utf-8"?>
      <!-- 透明背景按壓效果樣式 -->
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
      
          <!-- 按壓狀態(tài) -->
          <item android:drawable="@color/black5" android:state_pressed="true" />
      
          <!-- 選中狀態(tài) -->
          <item android:drawable="@color/black5" android:state_selected="true" />
      
          <!-- 焦點(diǎn)狀態(tài) -->
          <item android:drawable="@color/black5" android:state_focused="true" />
      
          <!-- 默認(rèn)狀態(tài) -->
          <item android:drawable="@color/transparent" />
      
      </selector>

       ?如果是 TextView 需添加  android:clickable="true" 屬性才可奏效

       

      MessageDialog在Activity中的使用

                  // 消息對(duì)話框
                  new MessageDialog.Builder(getActivity())
                          // 標(biāo)題可以不用填寫
                          .setTitle("我是標(biāo)題")
                          // 內(nèi)容必須要填寫
                          .setMessage("我是內(nèi)容")
                          // 確定按鈕文本
                          .setConfirm(getString(R.string.common_confirm))
                          // 設(shè)置 null 表示不顯示取消按鈕
                          .setCancel(getString(R.string.common_cancel))
                          // 設(shè)置點(diǎn)擊按鈕后不關(guān)閉對(duì)話框
                          //.setAutoDismiss(false)
                          .setListener(new MessageDialog.OnListener() {
      
                              @Override
                              public void onConfirm(BaseDialog dialog) {
                                  toast("確定了");
                              }
      
                              @Override
                              public void onCancel(BaseDialog dialog) {
                                  toast("取消了");
                              }
                          })
                          .show();

       

      個(gè)人結(jié)構(gòu)分析

      顯然如果把這樣一個(gè)大批量代碼移植到新的項(xiàng)目里,好像是不太現(xiàn)實(shí),還有一些基本資源 string、color等的定義。

      1、MessageDialog 設(shè)置Dialog內(nèi)容布局,接收ac的Dialog內(nèi)容以及按鈕接口實(shí)現(xiàn)類的傳入

      2、CommonDialog 設(shè)置相同Dialog的布局,將子類布局插入到Common的Dialog布局中,并接收按鈕接口實(shí)現(xiàn)類的傳入

      3、BaseDialog 定義Dialog style 顯示大小位置以及 真正的綁定按鈕的點(diǎn)擊事件。BaseDialog應(yīng)該是這個(gè)Dialog 的核心,這里采用的是BaseActivity extends AppCompatDialog 的形式,再通過(guò)BaseActivity.Builder去構(gòu)建Dialog對(duì)象,并且實(shí)現(xiàn)了大量的接口,這些接口不只是在BaseDialog中使用,在其他類中也可以達(dá)到復(fù)用的效果(后面再進(jìn)行拆分)。

       

      posted @ 2021-07-16 15:42  茄子魚  閱讀(346)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 欧美黑人巨大xxxxx| 怡红院一区二区三区在线| 涩涩爱狼人亚洲一区在线| 亚洲人妻精品一区二区| 国产360激情盗摄全集| 少妇又爽又刺激视频| 亚洲香蕉av一区二区蜜桃| 樱花草在线社区WWW韩国| 又污又爽又黄的网站| 国产成人夜色高潮福利app| 亚洲av二区国产精品| 久久综合亚洲色一区二区三区| 欧美不卡无线在线一二三区观| 精品一区二区三区免费视频| 真人无码作爱免费视频| 国产成人精品2021欧美日韩| 18av千部影片| 年日韩激情国产自偷亚洲| 色视频在线观看免费视频| 中文字幕有码日韩精品| 中文字幕日韩精品有码| 国产精品美女AV免费观看| 国产精品剧情亚洲二区| 色噜噜一区二区三区| 欧美肥老太牲交大战| 弥渡县| 蜜桃成熟色综合久久av| 依依成人精品视频在线观看| 欧日韩无套内射变态| 韩国美女福利视频一区二区| 五月丁香啪啪| 亚洲乱码中文字幕久久孕妇黑人| 人妻体内射精一区二区三四| 北岛玲亚洲一区二区三区| 人妻无码| 平江县| 色综合久久久久综合体桃花网| 老色鬼在线精品视频| 宜黄县| 久久婷婷综合色丁香五月| 色婷婷亚洲精品综合影院|