获取AlertDialog的默认填充

我需要使用自定义视图制作AlertDialog 。 一个AlertDialog的消息有一个默认的填充,但是当我设置一个视图,它没有填充,我魔杖获得相同的填充作为默认的消息。 我正在使用扩展Holo主题的风格(如果这是相关的)。

 AlertDialog.Builder builder = new AlertDialog.Builder(PlaylistListView.this.getContext()); builder.setTitle("Title"); builder.setView(inflate(context, R.layout.music_player_create_dialog, null)); builder.setPositiveButton("OK", null); builder.setNegativeButton("Cancel", null); builder.show(); 

这是内容的布局:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/abc_dialog_padding_material" android:paddingRight="@dimen/abc_dialog_padding_material" android:paddingTop="@dimen/abc_dialog_padding_top_material" android:paddingBottom="@dimen/abc_dialog_padding_top_material"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Title:"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="bottom" android:background="@null" android:layout_marginTop="20dp"/> <View android:layout_width="match_parent" android:layout_height="1px" android:background="@color/divider"/> </LinearLayout> 

Solutions Collecting From Web of "获取AlertDialog的默认填充"

?dialogPreferredPadding属性现在具有此值。 它是在API 22中引入的; 请参阅https://developer.android.com/sdk/api_diff/22/changes/android.R.attr.html

通过在对话框的布局上指定该属性,可以在自定义对话框中获得一致的填充。 例如, android:paddingLeft="?dialogPreferredPadding"将使对话框的内容与其标题alignment。

我陷入了同样的问题,所以不得不find答案。 如果有人来寻找答案,这是我的解决scheme。

AlertDialog布局的源代码在alert_dialog.xml中描述(例如在这里为android 4.4.1 ,这应该对应于全息主题)。 布局有硬编码填充(他们可能会在不同版本的Android不同)。 要知道默认的填充,你必须总结所有包含id/message" TextView id/message"视图的填充,在这种情况下,它们是3 + 14 + 5 = 22 dp,1 + 10 + 5 = 16 dp。

android:id/custom元素是自定义视图插入的位置,它有3个左侧的dp和1个dp右侧的填充(来自根元素,其他填充没有填充),您不必手动设置。

所以要得到一个自定义视图的填充与消息相同,将其设置为左侧19 dp和右侧15 dp(并且不要忘记保留默认的5 dp顶部和底部填充)。

示例代码:

 final EditText input = new EditText( getContext() ); float dpi = ctx.getResources().getDisplayMetrics().density; AlertDialog dialog = (new AlertDialog.Builder(getContext())) .setTitle("Rename track") .setMessage("Track name:") .setPositiveButton("OK", null) .setNegativeButton("Cancel", null) .create(); dialog.setView(input, (int)(19*dpi), (int)(5*dpi), (int)(14*dpi), (int)(5*dpi) ); dialog.show(); 

这些代码给出了这样的结果(看起来不错)。 顺便说一句,这是材料主题,这似乎有相同的填充(也硬编码)。

[ ]