android对话框美化,Android修改Dialog样式

android对话框美化,Android修改Dialog样式

2023年7月13日发(作者:)

android对话框美化,Android修改Dialog样式Android 对话框⽀持⾃定义标题,内容,按钮和点击事件,基本上可以满⾜我们⽇常的使⽤。但有时候我们想要修改对话框的⽂字,按钮颜⾊等,系统并没有提供对应的⽅法,正常情况下只能⾃定义布局。接下来通过源码解析介绍⼏种修改 Dialog样式的⽅法。⼀、Dialog源码解析1.1 new r(this).create()protected AlertDialog(@NonNull Context context, @StyleRes int themeResId) {super(context, resolveDialogTheme(context, themeResId));//创建AlertController,是Dialog布局相关代码mAlert = new AlertController(getContext(), this, getWindow());}@NonNullpublic AlertDialog create() {// We can't use Dialog's 3-arg constructor with the createThemeContextWrapper param,// so we always have to re-set the themefinal AlertDialog dialog = new AlertDialog(xt, mTheme);();celable(lable);if (lable) {celedOnTouchOutside(true);}ancelListener(celListener);ismissListener(missListener);if (Listener != null) {eyListener(Listener);}return dialog;}public void apply(AlertController dialog) {if (mCustomTitleView != null) {tomTitle(mCustomTitleView);} else {if (mTitle != null) {le(mTitle);}if (mIcon != null) {n(mIcon);}if (mIconId != 0) {n(mIconId);}..........AlertDialog 构造函数中会创建 AlertController,⽤来控制对话框的布局(); 将⽤户⾃定义的配置赋值给 AlertController1.2 AlertControllerpublic AlertController(Context context, AppCompatDialog di, Window window) {mContext = context;mDialog = di;mWindow = window;mHandler = new ButtonHandler(di);final TypedArray a = StyledAttributes(null, ialog,ialogStyle, 0);mAlertDialogLayout = ourceId(ialog_android_layout, 0);mButtonPanelSideLayout = ourceId(ialog_buttonPanelSideLayout, 0);mListLayout = ourceId(ialog_listLayout, 0);mMultiChoiceItemLayout = ourceId(ialog_multiChoiceItemLayout, 0);mSingleChoiceItemLayout = ourceId(ialog_singleChoiceItemLayout, 0);mListItemLayout = ourceId(ialog_listItemLayout, 0);mShowTitle = lean(ialog_showTitle, true);mButtonIconDimen = ensionPixelSize(ialog_buttonIconDimen, 0);e();/* We use a custom title so never request a window title */tRequestWindowFeature(E_NO_TITLE);}ialogStyle 是 对话框的默认样式,@style/pat@layout/abc_alert_dialog_material@layout/abc_select_dialog_material@layout/select_dialog_item_material@layout/select_dialog_multichoice_material@layout/select_dialog_singlechoice_material@dimen/abc_alert_dialog_button_dimen上述代码可以看出,abc_alert_dialog_material 就是dialog的默认布局。xmlns:android="/apk/res/android"android:id="@+id/parentPanel"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="start|left|top"android:orientation="vertical">android:id="@+id/contentPanel"android:layout_width="match_parent"android:layout_height="wrap_content"android:minHeight="48dp">android:layout_width="match_parent"android:layout_height="1dp"android:layout_gravity="top"android:background="?attr/colorControlHighlight"android:visibility="gone"/>android:id="@+id/scrollView"android:layout_width="match_parent"android:layout_height="wrap_content"android:clipToPadding="false">android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical">android:id="@+id/textSpacerNoTitle"android:layout_width="match_parent"android:layout_height="@dimen/abc_dialog_padding_top_material"android:visibility="gone"/>android:id="@android:id/message"style="@style/d"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="?attr/dialogPreferredPadding"android:paddingRight="?attr/dialogPreferredPadding"/>android:id="@+id/textSpacerNoButtons"android:layout_width="match_parent"android:layout_height="@dimen/abc_dialog_padding_top_material"android:visibility="gone"/>android:layout_width="match_parent"android:layout_height="1dp"android:layout_gravity="bottom"android:background="?attr/colorControlHighlight"android:visibility="gone"/>android:id="@+id/customPanel"android:layout_width="match_parent"android:layout_height="wrap_content"android:minHeight="48dp">android:id="@+id/custom"android:layout_width="match_parent"android:layout_height="wrap_content"/>android:layout_width="match_parent"android:layout_height="wrap_content"/>标题布局:android:id="@+id/topPanel"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical">android:id="@+id/title_template"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_vertical|start|left"android:orientation="horizontal"android:paddingLeft="?attr/dialogPreferredPadding"android:paddingRight="?attr/dialogPreferredPadding"android:paddingTop="@dimen/abc_dialog_padding_top_material">android:id="@android:id/icon"android:layout_width="32dip"android:layout_height="32dip"android:layout_marginEnd="8dip"android:layout_marginRight="8dip"android:scaleType="fitCenter"android:src="@null"/>android:id="@+id/alertTitle"style="?android:attr/windowTitleStyle"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="start"android:ellipsize="end"android:singleLine="true"android:textAlignment="viewStart"/>android:id="@+id/titleDividerNoCustom"android:layout_width="match_parent"android:layout_height="@dimen/abc_dialog_title_divider_material"android:visibility="gone"/>按钮布局:android:id="@+id/buttonPanel"style="?attr/buttonBarStyle"android:layout_width="match_parent"android:layout_height="wrap_content"android:fillViewport="true"android:scrollIndicators="top|bottom">android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="bottom"android:layoutDirection="locale"android:orientation="horizontal"android:paddingBottom="4dp"android:paddingLeft="12dp"android:paddingRight="12dp"android:paddingTop="4dp">android:id="@android:id/button3"style="?attr/buttonBarNeutralButtonStyle"android:layout_width="wrap_content"android:layout_height="wrap_content"/>android:id="@+id/spacer"android:layout_width="0dp"android:layout_height="0dp"android:layout_weight="1"android:visibility="invisible"/>android:id="@android:id/button2"style="?attr/buttonBarNegativeButtonStyle"android:layout_width="wrap_content"android:layout_height="wrap_content"/>android:id="@android:id/button1"style="?attr/buttonBarPositiveButtonStyle"android:layout_width="wrap_content"android:layout_height="wrap_content"/>⼆、修改Dialog样式2.1 通过r builder = new r(this);sage(msg);itiveButton(getString(), null);AlertDialog dialog = ();();//直接通过id找到对应的控件Button button = ewById(1);//或者通过getButton⽅法也可以获取到Button button2 = ton(_POSITIVE);这种修改⽅式必须在 show() 之后调⽤,否则会出现空指针异常。这个是因为,执⾏ show() ⽅法的时候,dialog才会初始化布局,具体源码可以查看 Dialog 的 onCreate ⽅法。2.2 ⾃定义style通过上⾯源码可以发现,Dialog三个按钮的样式如下:buttonBarNeutralButtonStylebuttonBarNegativeButtonStylebuttonBarPositiveButtonStyleandroid:id="@android:id/button3"style="?attr/buttonBarNeutralButtonStyle"android:layout_width="wrap_content"android:layout_height="wrap_content"/>android:id="@+id/spacer"android:layout_width="0dp"android:layout_height="0dp"android:layout_weight="1"android:visibility="invisible"/>android:id="@android:id/button2"style="?attr/buttonBarNegativeButtonStyle"android:layout_width="wrap_content"android:layout_height="wrap_content"/>android:id="@android:id/button1"style="?attr/buttonBarPositiveButtonStyle"android:layout_width="wrap_content"android:layout_height="wrap_content"/>⾃定义样式替换上述 style即可达到修改效果。在添加如下代码:@color/test1@color/test2@style/accessPositiveBtnStyle@style/accessNegativeBtnStyle具体使⽤:r builder = new r(this, alogTheme);sage("Test");celable(false);itiveButton("确认", null);ativeButton("取消", null);Dialog dialog = ();();

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689215916a222263.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信