安卓自定義列表dialog
前言
這個形式也是最常用的,不過最近需要用到列表資訊Dialog
,原生的不光樣式不能滿足需求,而且是開發電視端的APP,需要對焦點進行特殊處理,所以就需要自定義Dialog
我們先來看一下系統自帶的列表Dialog。
系統自帶列表Dialog
第一種:純列表
我們先來看第一種:
最簡單的一種,沒有當前狀態,只有列表,選中之後彈框就會消失(非手動呼叫dialog.dismiss()
)
程式碼如下:
AlertDialog alertDialog = new AlertDialog
.Builder(MainActivity.this)
.setItems(new String[]{"科目一", "科目二", "科目三"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"選擇了第"+which+"個",Toast.LENGTH_SHORT).show();
}
}).create();
alertDialog.show();
第二種:單選列表
這種列表會有checked提示,setSingleChoiceItems()
中第二個引數就是控制第幾個被選中,而且點選之後不會自動消失,需要手動呼叫dialog.dismiss()
,有時會配合setNegativeButton()、setPositiveButton
等一起使用。
程式碼如下:
AlertDialog alertDialog = new AlertDialog
.Builder(MainActivity.this)
.setSingleChoiceItems(new String[]{"科目一", "科目二", "科目三"}, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"選擇了第"+which+"個",Toast.LENGTH_SHORT).show();
}
}).create();
alertDialog.show();
第三種:多選列表
這種列表也會有checked提示,而且是多選框,setSingleChoiceItems()
的第二個引數是boolean陣列,控制哪些被選中。而且點選之後也不會自動消失,需要手動呼叫dialog.dismiss()
,有時會配合setNegativeButton()、setPositiveButton()
等一起使用。
程式碼如下:
AlertDialog alertDialog = new AlertDialog
.Builder(MainActivity.this)
.setMultiChoiceItems(new String[]{"科目一", "科目二", "科目三"}, new boolean[]{true, false, true}, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(MainActivity.this,"選擇了第"+which+"個",Toast.LENGTH_SHORT).show();
}
}).create();
alertDialog.show();
自定義Dialog
看了系統自帶的效果你會發現不能滿足UI的效果,那麼接下來進行我們的自定義。
第一步:自定義item的佈局檔案
item佈局檔案dialog_item.xml
程式碼
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/contentConstraintLayout"
android:layout_width="@dimen/dp_450"
android:layout_height="@dimen/dp_85">
<TextView
android:id="@+id/typeTextview"
android:textSize="@dimen/sp_30"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:text="256Kbps"
android:textColor="@color/color_212121"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/stateImageView"
android:layout_width="@dimen/dp_65"
android:layout_height="@dimen/dp_65"
android:layout_marginEnd="17dp"
android:background="@drawable/diglog_sel"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
圖片選中效果diglog_sel.xml
程式碼
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/selected" android:state_selected="true" />
<item android:drawable="@android:color/transparent" />
</selector>
第二步:自定義adapter
我這裡只是傳遞一些簡單的資料到adapter,具體看實際業務傳遞不同的資料,控制不同的效果。
public class DialogItemAdapter extends BaseAdapter {
//這裡可以傳遞個物件,用來控制不同的item的效果
//比如每個item的背景資源,選中樣式等
public List<String> list;
LayoutInflater inflater;
public DialogItemAdapter(Context context, List<String> list) {
this.list = list;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public String getItem(int i) {
if (i == getCount() || list == null) {
return null;
}
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.dialog_item, null);
holder.typeTextview = (TextView) convertView.findViewById(R.id.typeTextview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.typeTextview.setText(getItem(position));
return convertView;
}
public static class ViewHolder {
public TextView typeTextview;
}
}
第三步:使用
DialogItemAdapter adapter = new DialogItemAdapter(MainActivity.this, iniDatas());
AlertDialog alertDialog = new AlertDialog
.Builder(MainActivity.this)
.setSingleChoiceItems(adapter, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
alertDialog.show();
public List<String> iniDatas() {
List<String> list = new ArrayList<String>();
list.add("科目一");
list.add("科目二");
list.add("科目三");
return list;
}
博主這個dialog要在TV上使用,所以可以看到通過上下鍵控制選中的時候右邊會有一個選中箭頭,然後在點選的時候dismiss
。
更多效果等待你可自行打造你的專屬Dialog。
相關推薦
安卓自定義列表dialog
前言 這個形式也是最常用的,不過最近需要用到列表資訊Dialog,原生的不光樣式不能滿足需求,而且是開發電視端的APP,需要對焦點進行特殊處理,所以就需要自定義Dialog 我們先來看一下系統自帶的列表Dialog。 系統自帶列表Dialog
去除安卓自定義Dialog黑色背景,設置無邊框,透明
isf window bsp 希望 nbsp tle -name rep lan 我們在自定義Dialog的時候,往往會希望除去安卓系統定義背景和標題,以便於更好的顯示我們自己想要的效果。 其實我們只需要註意幾個地方就行了。 1.在Style文件的中定義Dialog的主題
安卓自定義dialog
MyDialog.java public class MyDialog extends Dialog { public MyDialog(@NonNull Context context) { super(context); se
解決安卓自定義Dialog不能水平填滿螢幕
問題描述: UI設計,需要展示一個底部充滿螢幕的彈出框,但是發現下面和左右都沒有充滿。 預期: 實際: 解決方案: 自定義的Dialog中呼叫父類建構函式時,需要設定style 完整自定義dialog程式碼如下: 1.CustDialog.java pa
安卓自定義彈框(Dialog)
1.在style檔案中建立一個style <style name="dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</
安卓自定義Dialog之BaseDialog
專案裡用到的dialog越來越多,樣式也各式各樣,為了方便,所以就考慮寫一個BaseDialog。 新建BaseDialog繼承Dialog public class BaseDialog extends Dialog {
安卓自定義Dialog的實現
一、Dialog佈局檔案 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/andr
安卓自定義Dialog(一)
這個自定義Dialog主要是提醒使用者一些資訊:該環境沒有網,登入賬號是提示密碼錯誤.... 話不多說直接上程式碼: 一.實現功能的.java類 public static Dialog CreatDialog(Context context, String s,
安卓自定義:Toast 以及Toast的出場動畫 以及Toast上新增圖片 以及點選事件
安卓自定義Toast: 1.自定義一個類:CustomToast 繼承自:Toast 2.在CustomToast類中 新增一個靜態 mCustomToast 物件 private static CustomToast mCustomToast; 3.在CustomToast類中 新
安卓自定義switch樣式
榮耀手機鬧鐘開關的switch樣式,最近簡單的方法可以直接設定兩張圖片,根據按鈕狀態來進行切換。 這裡主要說另外一種方式 首先建立兩個track的資原始檔,也就是後面的背景 建立未開啟狀態下的track起名為track_bg_gray <?xml version="1.0
Android安卓自定義由底部彈出對話方塊
努力不一定立刻會有好的結果,但一定是朝著好的方向 ——李尚龍 《你所謂的穩定,不過是在浪費生命》
安卓自定義View進階-手勢檢測(GestureDecetor)
Android 手勢檢測,主要是 GestureDetector 相關內容的用法和注意事項,本文依舊屬於事件處理這一體系,部分內容會涉及到之前文章提及過的知識點,如果你沒看過之前的文章,可以到 自定義 View 系列 來檢視這些內容。 在開發 Android 手機應用過程中,可
安卓自定義View進階-多點觸控詳解
Android 多點觸控詳解,在前面的幾篇文章中我們大致瞭解了 Android 中的事件處理流程和一些簡單的處理方案,本次帶大家瞭解 Android 多點觸控相關的一些知識。 多點觸控 ( Multitouch,也稱 Multi-touch ),即同時接受螢幕上多個點的人機互動
安卓自定義View進階-特殊控制元件的事件處理方案
本文帶大家瞭解 Android 特殊形狀控制元件的事件處理方式,主要是利用了 Region 和 Matrix 的一些方法,超級實用的事件處理方案,相信看完本篇之後,任何奇葩控制元件的事件處理都會變得十分簡單。 不得不說,Android 對事件體系封裝的非常棒,即便對事件體系不太
安卓自定義View進階-MotionEvent詳解
Android MotionEvent 詳解,之前用了兩篇文章 事件分發機制原理 和 事件分發機制詳解 來講解事件分發,而作為事件分發主角之一的 MotionEvent 並沒有過多的說明,本文就帶大家瞭解 MotionEvent 的相關內容,簡要介紹觸控事件,主要包括 單點觸控、多點
安卓自定義View進階-事件分發機制詳解
Android 事件分發機制詳解,在上一篇文章 事件分發機制原理 中簡要分析了一下事件分發機制的原理,原理是十分簡單的,一句話就能總結:責任鏈模式,事件層層傳遞,直到被消費。 雖然原理簡單,但是隨著 Android 不斷的發展,實際運用場景也越來越複雜,所以想要徹底玩轉事件分發機制還
安卓自定義View進階-Matrix Camera
本篇依舊屬於Matrix,主要講解Camera,Android下有很多相機應用,其中的美顏相機更是不少,不過今天這個Camera可不是我們平時拍照的那個相機,而是graphic包下的Camera,專業給View拍照的相機,不過既然是相機,作用都是類似的,主要是將3D的內容拍扁變成2D
安卓自定義View進階-Matrix詳解
這應該是目前最詳細的一篇講解Matrix的中文文章了,在上一篇文章Matrix原理中,我們對Matrix做了一個簡單的瞭解,偏向理論,在本文中則會詳細的講解Matrix的具體用法,以及與Matrix相關的一些實用技巧。 ⚠️ 警告:測試本文章示例之前請關閉硬體加速。
安卓自定義View進階-Matrix原理
本文內容偏向理論,和 畫布操作 有重疊的部分,本文會讓你更加深入的瞭解其中的原理。 本篇的主角Matrix,是一個一直在後臺默默工作的勞動模範,雖然我們所有看到View背後都有著Matrix的功勞,但我們卻很少見到它,本篇我們就看看它是何方神聖吧。 由於Goog
安卓自定義View進階-PathMeasure
可以看到,在經過 Path之基本操作 Path之貝塞爾曲線 和 Path之完結篇 後, Path中各類方法基本上都講完了,表格中還沒有講解到到方法就是矩陣變換了,難道本篇終於要講矩陣了? 非也,矩陣這一部分仍在後面單獨講解,本篇主要講解 PathMeasure 這個類與 Path 的