默认样式
<style name="AlertDialog.Material" parent="AlertDialog">
<item name="fullDark">@empty</item>
<item name="topDark">@empty</item>
<item name="centerDark">@empty</item>
<item name="bottomDark">@empty</item>
<item name="fullBright">@empty</item>
<item name="topBright">@empty</item>
<item name="centerBright">@empty</item>
<item name="bottomBright">@empty</item>
<item name="bottomMedium">@empty</item>
<item name="centerMedium">@empty</item>
<item name="layout">@layout/alert_dialog_material</item>
<item name="listLayout">@layout/select_dialog_material</item>
<item name="progressLayout">@layout/progress_dialog_material</item>
<item name="horizontalProgressLayout">@layout/alert_dialog_progress_material</item>
<item name="listItemLayout">@layout/select_dialog_item_material</item>
<item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_material</item>
<item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_material</item>
<item name="controllerType">@integer/config_alertDialogController</item>
<item name="selectionScrollOffset">@dimen/config_alertDialogSelectionScrollOffset</item>
</style>
名称 | 说明 |
---|---|
fullDark | |
topDark | |
centerDark | |
bottomDark | |
fullBright | |
topBright | |
centerBright | |
bottomBright | |
bottomMedium | |
centerMedium | |
layout | 标准布局 |
listLayout | 列表布局 |
progressLayout | 圆形进度条布局 |
horizontalProgressLayout | 横方向进度条布局 |
listItemLayout | 列表项目布局 |
multiChoiceItemLayout | 多选列表项目布局 |
singleChoiceItemLayout | 单选列表项目布局 |
controllerType | Controller类型设置: 0 正常, 1 Micro |
selectionScrollOffset | 设置滚动条位置 |
标准布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<com.android.internal.widget.AlertDialogLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start|top"
android:orientation="vertical">
<include layout="@layout/alert_dialog_title_material" />
<FrameLayout
android:id="@+id/contentPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp">
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Space
android:id="@+id/textSpacerNoTitle"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_padding_top_material" />
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="?attr/dialogPreferredPadding"
android:paddingStart="?attr/dialogPreferredPadding"
style="@style/TextAppearance.Material.Subhead" />
<Space
android:id="@+id/textSpacerNoButtons"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_padding_top_material" />
</LinearLayout>
</ScrollView>
</FrameLayout>
<FrameLayout
android:id="@+id/customPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp">
<FrameLayout
android:id="@+id/custom"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
<include
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/alert_dialog_button_bar_material" />
</com.android.internal.widget.AlertDialogLayout>
名称 | 说明 |
---|---|
@layout/alert_dialog_title_material | 标题布局 |
dialogPreferredPadding | 信息左右Padding |
@layout/alert_dialog_button_bar_material | 按钮布局 |
没有什么可以调整的,但凡有个图片啥的就使用setView()吧
dialogPreferredPadding
示例
<style name="AppTheme.Dialog.Alert" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:dialogPreferredPadding">@dimen/dialog_padding_0</item>
</style>
这个属性很多地方使用,慎改
标题布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/topPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- If the client uses a customTitle, it will be added here. -->
<LinearLayout
android:id="@+id/title_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical|start"
android:paddingStart="?attr/dialogPreferredPadding"
android:paddingEnd="?attr/dialogPreferredPadding"
android:paddingTop="@dimen/dialog_padding_top_material">
<ImageView
android:id="@+id/icon"
android:layout_width="32dip"
android:layout_height="32dip"
android:layout_marginEnd="8dip"
android:scaleType="fitCenter"
android:src="@null" />
<com.android.internal.widget.DialogTitle
android:id="@+id/alertTitle"
android:singleLine="true"
android:ellipsize="end"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="viewStart"
style="?attr/windowTitleStyle" />
</LinearLayout>
<Space
android:id="@+id/titleDividerNoCustom"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_title_divider_material" />
</LinearLayout>
名称 | 说明 |
---|---|
dialogPreferredPadding | 左右空白宽度 |
windowTitleStyle | 标题样式 |
windowTitleStyle
示例
<style name="AppTheme.Dialog.Alert" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowTitleStyle">@style/DialogTitleStyle</item>
</style>
<style name="DialogTitleStyle" parent="RtlOverlay.DialogWindowTitle.AppCompat">
<item name="android:textAppearance">@style/DialogTitleStyle.Title</item>
</style>
<style name="DialogTitleStyle.Title" parent="TextAppearance.AppCompat.Title">
<item name="android:textSize">26sp</item>
<item name="android:textColor">#FF0000</item>
</style>
只能调整文字大小和颜色,如果居中啥的,还是使用setCustomTitle()吧
按钮布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/buttonPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollIndicators="top|bottom"
android:fillViewport="true"
style="?attr/buttonBarStyle">
<com.android.internal.widget.ButtonBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutDirection="locale"
android:orientation="horizontal"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:gravity="bottom">
<Button
android:id="@+id/button3"
style="?attr/buttonBarNeutralButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Space
android:id="@+id/spacer"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"
android:visibility="invisible" />
<Button
android:id="@+id/button2"
style="?attr/buttonBarNegativeButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button1"
style="?attr/buttonBarPositiveButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</com.android.internal.widget.ButtonBarLayout>
</ScrollView>
名称 | 说明 |
---|---|
buttonBarStyle | 按钮容器样式 |
buttonBarNeutralButtonStyle | Neutral按钮样式 |
buttonBarNegativeButtonStyle | Negative按钮样式 |
buttonBarPositiveButtonStyle | Positive按钮样式 |
按钮容器样式
本身是一个ScrollView控件,按照ScrollView样式设置即可,其实也就是设置个空白啥的
Positive按钮样式
示例
<style name="AppTheme.Dialog.Alert" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:buttonBarPositiveButtonStyle">@style/DialogButtonStyle.Button.Positive</item>
</style>
<style name="DialogButtonStyle.Button.Positive">
<item name="android:textColor">#000000</item>
<item name="android:background">#00FF00</item>
<item name="android:layout_weight">1</item>
</style>
按钮样式除了宽高和位置,其他都按照Button样式设置即可
Negative按钮样式
<style name="AppTheme.Dialog.Alert" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:buttonBarNegativeButtonStyle">@style/DialogButtonStyle.Button.Negative</item>
</style>
<style name="DialogButtonStyle.Button.Negative">
<item name="android:textColor">#000000</item>
<item name="android:background">#00FFFF</item>
<item name="android:layout_weight">1</item>
</style>
按钮样式除了宽高和位置,其他都按照Button样式设置即可
Neutral按钮样式
示例
<style name="AppTheme.Dialog.Alert" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:buttonBarNeutralButtonStyle">@style/DialogButtonStyle.Button.Neutral</item>
</style>
<style name="DialogButtonStyle.Button.Neutral">
<item name="android:textColor">#000000</item>
<item name="android:background">#FF00FF</item>
<item name="android:textSize">24sp</item>
<item name="android:layout_weight">1</item>
</style>
按钮样式除了宽高和位置,其他都按照Button样式设置即可
列表布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
This layout file is used by the AlertDialog when displaying a list of items.
This layout file is inflated and used as the ListView to display the items.
Assign an ID so its state will be saved/restored.
-->
<view class="com.android.internal.app.AlertController$RecycleListView"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/select_dialog_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="@null"
android:divider="?attr/listDividerAlertDialog"
android:scrollbars="vertical"
android:overScrollMode="ifContentScrolls"
android:textAlignment="viewStart"
android:clipToPadding="false"
android:paddingBottomNoButtons="@dimen/dialog_list_padding_bottom_no_buttons"
android:paddingTopNoTitle="@dimen/dialog_list_padding_top_no_title" />
名称 | 说明 |
---|---|
listDividerAlertDialog | 分割符 |
分割符
示例
<style name="AppTheme.Dialog.List" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:listDividerAlertDialog">@drawable/dialog_list_divider</item>
</style>
分割符只识别drawable
圆形进度条布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/body"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:paddingStart="?attr/dialogPreferredPadding"
android:paddingTop="@dimen/dialog_padding_top_material"
android:paddingEnd="?attr/dialogPreferredPadding"
android:paddingBottom="@dimen/dialog_padding_top_material">
<ProgressBar
android:id="@id/progress"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:max="10000"
android:layout_marginEnd="?attr/dialogPreferredPadding" />
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
</LinearLayout>
</FrameLayout>
名称 | 说明 |
---|---|
dialogPreferredPadding | 左右空白宽度 |
progressBarStyle | 进度条样式 |
ProgressDialog已作废,这个好像没啥用了
横方向进度条布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingStart="?attr/dialogPreferredPadding"
android:paddingTop="@dimen/dialog_padding_top_material"
android:paddingEnd="?attr/dialogPreferredPadding"
android:paddingBottom="@dimen/dialog_padding_top_material">
<ProgressBar
android:id="@+id/progress"
style="?attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
<TextView
android:id="@+id/progress_percent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@id/progress" />
<TextView
android:id="@+id/progress_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_below="@id/progress" />
</RelativeLayout>
名称 | 说明 |
---|---|
dialogPreferredPadding | 左右空白宽度 |
progressBarStyleHorizontal | 进度条样式 |
ProgressDialog已作废,这个好像没啥用了
列表项目布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
This layout file is used by the AlertDialog when displaying a list of items.
This layout file is inflated and used as the TextView to display individual
items.
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textColor="?android:attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingStart="?attr/listPreferredItemPaddingStart"
android:paddingEnd="?attr/listPreferredItemPaddingEnd"
android:ellipsize="marquee" />
名称 | 说明 |
---|---|
listPreferredItemHeightSmall | 最小高度 |
textAppearanceListItemSmall | 文字外观 |
textColorAlertDialogListItem | 文字颜色 |
listPreferredItemPaddingStart | 左空白宽度 |
listPreferredItemPaddingEnd | 右空白宽度 |
示例
<style name="AppTheme.Dialog.List" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:listPreferredItemHeightSmall">72dp</item>
<item name="android:textColorAlertDialogListItem">#666666</item>
<item name="android:listPreferredItemPaddingStart">64dp</item>
<item name="android:listPreferredItemPaddingEnd">32dp</item>
<item name="android:textAppearanceListItemSmall">@style/TextAppearance.AppCompat.Small</item>
</style>
想要项目居中显示的话,还是使用setView()吧
多选列表项目布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeightSmall"
android:textAppearance="?attr/textAppearanceMedium"
android:textColor="?attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingStart="@dimen/select_dialog_padding_start_material"
android:paddingEnd="?attr/dialogPreferredPadding"
android:drawableStart="?attr/listChoiceIndicatorMultiple"
android:drawablePadding="@dimen/select_dialog_drawable_padding_start_material"
android:ellipsize="marquee" />
名称 | 说明 |
---|---|
listPreferredItemHeightSmall | 最小高度 |
textAppearanceMedium | 文字外观 |
textColorAlertDialogListItem | 文字颜色 |
dialogPreferredPadding | 右空白宽度 |
listChoiceIndicatorMultiple | 选择框样式 |
示例
<style name="AppTheme.Dialog.List" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:listPreferredItemHeightSmall">72dp</item>
<item name="android:textColorAlertDialogListItem">#666666</item>
<item name="android:dialogPreferredPadding">32dp</item>
<item name="android:textAppearanceMedium">@style/TextAppearance.AppCompat.Medium</item>
<item name="android:listChoiceIndicatorMultiple">@drawable/imagegrid_delete_image</item>
</style>
listChoiceIndicatorMultiple
可以是图片
单选列表项目布局
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeightSmall"
android:textAppearance="?attr/textAppearanceMedium"
android:textColor="?attr/textColorAlertDialogListItem"
android:gravity="center_vertical"
android:paddingStart="@dimen/select_dialog_padding_start_material"
android:paddingEnd="?attr/dialogPreferredPadding"
android:drawableStart="?attr/listChoiceIndicatorSingle"
android:drawablePadding="@dimen/select_dialog_drawable_padding_start_material"
android:ellipsize="marquee" />
名称 | 说明 |
---|---|
listPreferredItemHeightSmall | 最小高度 |
textAppearanceMedium | 文字外观 |
textColorAlertDialogListItem | 文字颜色 |
dialogPreferredPadding | 右空白宽度 |
listChoiceIndicatorSingle | 选择框样式 |
示例
<style name="AppTheme.Dialog.List" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:listPreferredItemHeightSmall">72dp</item>
<item name="android:textColorAlertDialogListItem">#666666</item>
<item name="android:dialogPreferredPadding">32dp</item>
<item name="android:textAppearanceMedium">@style/TextAppearance.AppCompat.Medium</item>
<item name="android:listChoiceIndicatorSingle">@drawable/imagegrid_delete_image</item>
</style>
listChoiceIndicatorSingle
可以是图片