欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android中DialogFragment如何使用

Android中DialogFragment如何使用,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

成都創(chuàng)新互聯(lián)長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為蕪湖企業(yè)提供專業(yè)的網(wǎng)站制作、網(wǎng)站建設(shè),蕪湖網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

基本用法

對(duì)于方法 ①,創(chuàng)建一個(gè) Dialog 并返回它即可:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
 //為了樣式統(tǒng)一和兼容性,可以使用 V7 包下的 AlertDialog.Builder
 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 // 設(shè)置主題的構(gòu)造方法
 // AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.CustomDialog);
 builder.setTitle("注意:")
   .setMessage("是否退出應(yīng)用?")
   .setPositiveButton("確定", null)
   .setNegativeButton("取消", null)
   .setCancelable(false);
   //builder.show(); // 不能在這里使用 show() 方法
 return builder.create();
}

當(dāng)然,你也可以使用自定義 View 來(lái)創(chuàng)建:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 // 設(shè)置主題的構(gòu)造方法
 // AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.CustomDialog);
 LayoutInflater inflater = getActivity().getLayoutInflater(); 
 View view = inflater.inflate(R.layout.fragment_dialog, null); 
 builder.setView(view) 
 // Do Someting,eg: TextView tv = view.findViewById(R.id.tv);
 return builder.create();
}

PS:創(chuàng)建 Dialog 的方式有多種,比如下面這種,使用時(shí)略有差異,需要自己注意:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
 LayoutInflater inflater = getActivity().getLayoutInflater();
  View view = inflater.inflate(R.layout.fragment_dialog, null);
 Dialog dialog = new Dialog(getActivity());
  // 設(shè)置主題的構(gòu)造方法
  // Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);
  dialog.setContentView(view);
  // Do Someting
 return dialog;
}

對(duì)于方法 ②,和普通的 Fragment 用法基本一致:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 View rootView = inflater.inflate(R.layout.fragment_dialog, container, false);
 // Do Someting
 return rootView;
}
/**
 * 設(shè)置主題需要在 onCreate() 方法中調(diào)用 setStyle() 方法
 */
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialog);
}

處理屏幕翻轉(zhuǎn)

如果使用傳統(tǒng)的 Dialog ,需要我們手動(dòng)處理屏幕翻轉(zhuǎn)的情況,但使用 DialogFragment 的話,則不需要我們進(jìn)行任何處理,F(xiàn)ragmentManager 會(huì)自動(dòng)管理 DialogFragment 的生命周期。

無(wú)標(biāo)題欄/全屏

在基本用法里代碼注釋有設(shè)置主題的地方,下面詳細(xì)說(shuō)下兩種方法下設(shè)置無(wú)標(biāo)題欄和實(shí)現(xiàn)全屏的方式:

無(wú)標(biāo)題欄

對(duì)于方法 ① :

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
 LayoutInflater inflater = getActivity().getLayoutInflater();
 View view = inflater.inflate(R.layout.fragment_dialog, null);
 Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);
  // 關(guān)閉標(biāo)題欄,setContentView() 之前調(diào)用
 dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
 dialog.setContentView(view);
 dialog.setCanceledOnTouchOutside(true);
 return dialog;
}

對(duì)于方法 ②:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 /**
 * setStyle() 的第一個(gè)參數(shù)有四個(gè)可選值:
 * STYLE_NORMAL|STYLE_NO_TITLE|STYLE_NO_FRAME|STYLE_NO_INPUT
 * 其中 STYLE_NO_TITLE 和 STYLE_NO_FRAME 可以關(guān)閉標(biāo)題欄
 * 每一個(gè)參數(shù)的詳細(xì)用途可以直接看 Android 源碼的說(shuō)明
 */
 setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialog);
}

實(shí)現(xiàn)全屏(寬/高度全屏)

常用的形式大多是寬度上和屏幕一樣寬,高度自適應(yīng),下面直接看代碼:

方法 ① :

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
 LayoutInflater inflater = getActivity().getLayoutInflater();
 View view = inflater.inflate(R.layout.fragment_dialog, null);
 Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);
 dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
 dialog.setContentView(view);
 dialog.setCanceledOnTouchOutside(true);
 //Do something
  // 設(shè)置寬度為屏寬、位置靠近屏幕底部
 Window window = dialog.getWindow();
 window.setBackgroundDrawableResource(R.color.transparent);
 WindowManager.LayoutParams wlp = window.getAttributes();
 wlp.gravity = Gravity.BOTTOM;
 wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
  wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
 window.setAttributes(wlp);
 return dialog;
}

代碼 12 行設(shè)置了窗口的背景色為透明,這一步是必須的;

代碼 15 行設(shè)置窗口的寬度為 MATCH_PARENT,效果是和屏幕寬度一樣大,同樣你也可以設(shè)置高度的值。設(shè)置寬度和高度除了 MATCH_PARENT 和 WRAP_CONTENT ,也可以直接設(shè)置成具體的數(shù)值。

方法 ②:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialog);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    getDialog().setCanceledOnTouchOutside(true);
    View rootView = inflater.inflate(R.layout.fragment_dialog, container, false);
    //Do something
    // 設(shè)置寬度為屏寬、靠近屏幕底部。
    final Window window = getDialog().getWindow();
    window.setBackgroundDrawableResource(R.color.transparent);
    window.getDecorView().setPadding(0, 0, 0, 0);
    WindowManager.LayoutParams wlp = window.getAttributes();
    wlp.gravity = Gravity.BOTTOM;
    wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
    wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
    window.setAttributes(wlp);
    return rootView;
}

代碼 14 行設(shè)置了窗口的背景色為透明,這一步是必須的;

代碼 15 行設(shè)置了窗口的 Pading 值全部為0,這一步也是必須的,內(nèi)容不能填充全部寬度和高度。

其他的和 ① 中的類似。

應(yīng)用場(chǎng)景區(qū)別

文章一開始簡(jiǎn)單總結(jié)了方法 ① 和方法 ② 的應(yīng)用場(chǎng)景,這里說(shuō)明下:

1. 從基本的用法中可以看到方法 ① 為簡(jiǎn)單的替代 Dialog 提供了非常方便的創(chuàng)建方式,比方法 ② 有優(yōu)勢(shì)
2. 方法 ① 在使用了多線程(例如網(wǎng)絡(luò)請(qǐng)求)的情況下,不能正確的獲取當(dāng)前 Fragment 的狀態(tài),會(huì)產(chǎn)生空指針異常。方法 ② 則沒(méi)有此問(wèn)題,而且,其創(chuàng)建方式默認(rèn)使用了自定義 View,更便于應(yīng)對(duì)復(fù)雜 UI 的場(chǎng)景。

這里舉例說(shuō)明:方法 ① 和方法 ② 的//Do something 代碼處,我們進(jìn)行一些異步操作:

TextView title = rootView.findViewById(R.id.dialoag_tv);
title.setText("Value A");
new SomeTask().execute(url);
private class SomeTask extends AsyncTask<String, Void, Boolean> {
    @Override
    protected Boolean doInBackground(String... params) {
      // 一些網(wǎng)絡(luò)請(qǐng)求
      // 成功時(shí) return true;
      // 異常時(shí) return false;
    }
    @Override
    protected void onPostExecute(Boolean aBoolean) {
      super.onPostExecute(aBoolean);
      // if (!isVisible()) return;
      if (aBoolean) {
        title.setText("Value B");
      }
    }
}

看完上述內(nèi)容,你們掌握Android中DialogFragment如何使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前文章:Android中DialogFragment如何使用
轉(zhuǎn)載注明:http://aaarwkj.com/article36/jjphsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站企業(yè)網(wǎng)站制作、軟件開發(fā)、用戶體驗(yàn)建站公司、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
久久精品亚洲天然东京热| 九九六热这里只有精品| 国产精品一区二区久久蜜桃麻豆| 天天操天天射夜夜撸| 中文字幕中文字幕乱码| 久久久久久这里都是精品| 日韩欧美亚洲国产资源| 国产亚洲一区二区精品| 区二区三区毛片乱码免费| 免费福利激情在线播放| 午夜福利亚洲免费久久| 黄色成人av在线网站| 亚洲激情粉嫩中文字幕| 国产精品大屁股白浆一区二区 | 91精品免费播放在线观看| 特黄特色的日本大片| 亚洲精品日韩国产av| 久久伊人69日韩精品| 亚洲av一区二区三区色多多| 亚洲国产精品区一区二区| 少妇又色又爽又高潮欧美| 亚洲精品中文字幕乱码| 美女av在线免费观看| 在线国产丝袜自拍观看| 日韩精品欧美成人高清一区二区 | av熟女乱一区二区三区| 国产69精品久久一级| 夫妻性生活在线视频一级片| 日本又色又爽又黄的观看| 欧美亚洲一区二区三区91| 日韩中文字幕综合不卡| 丁香六月五月色婷婷网| 日韩欧美一区亚洲一区| 无人视频在线观看高清91| 大片天天看菲色亚洲黄色| 亚洲精品日本一区二区| av福利一区二区三区| 亚洲香蕉视频免费在线观看| 日本成人精品二区在线观看| 国产日产精品久久婷婷色| 特黄日韩免费一区二区三区|