gpt4 book ai didi

android - AlertDialog setCustomTitle 样式以匹配标准 AlertDialog 标题

转载 作者:IT老高 更新时间:2023-10-28 23:07:01 24 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,并且我有一个 AlertDialog 子类。我想在对话框标题区域的右侧放置 2 个 ImageButtons(类似于 Activity 中的 ActionBar)。我正在使用 setCustomTitle() 来执行此操作,它将标题区域替换为我自己创建的自定义 View 。这很好用,但我的自定义标题区域的样式与标准标题样式(高度、颜色、分隔符等)不同。

我的问题是:了解样式因操作系统版本和制造商而异,我如何在对话框中设置自定义标题的样式,以使其与其他 AlertDialogs 的标准标题样式匹配?

这是带有标准样式的 anAlertDialog 的图像(来自 ICS,但我希望能够匹配任何变体——不是这种特殊样式) enter image description here

这是一个带有自定义标题和按钮的 AlertDialog 的图像(请注意标题高度和颜色与标准对话框的不匹配) enter image description here

编辑:我不能只将 ImageButtons 添加到标准标题 View ,因为我无权访问它。 如果您知道我向标准标题区域添加按钮的(可靠、非黑客)方法,我也会接受。

最佳答案

鉴于对这个问题有新的兴趣,让我详细说明一下我是如何“解决”这个问题的。

首先,我使用 ActionBarSherlock在我的应用程序中。我想这不是必需的,尽管它有很大帮助,因为 ABS 项目中定义的样式和主题允许我在 ICS 之前的设备上模仿 Holo 主题,从而在应用程序中提供一致的体验。

其次,我的“对话”不再是对话——而是以对话为主题的 Activity 。这使得 View 层次结构的操作更简单,因为我拥有完全的控制权。所以现在向标题区域添加按钮很简单。

这里是屏幕截图(2.2 设备和 4.1 模拟器)。请注意,唯一显着的样式差异是 EditText,我选择不解决。

2.2 device 4.1 emulator

这是我的对话 Activity 中的 onCreate:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_tag);
setTitle(R.string.tag_dialog_title);

View sherlockTitle = findViewById(android.R.id.title);
if (sherlockTitle != null) {
sherlockTitle.setVisibility(View.GONE);
}
View sherlockDivider = findViewById(R.id.abs__titleDivider);
if (sherlockDivider != null) {
sherlockDivider.setVisibility(View.GONE);
}

// setup custom title area
final View titleArea = findViewById(R.id.dialog_custom_title_area);
if (titleArea != null) {
titleArea.setVisibility(View.VISIBLE);

TextView titleView = (TextView) titleArea.findViewById(R.id.custom_title);
if (titleView != null) {
titleView.setText(R.string.tag_dialog_title);
}

ImageButton cancelBtn = (ImageButton) titleArea.findViewById(R.id.cancel_btn);
cancelBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
cancelBtn.setVisibility(View.VISIBLE);

ImageButton okBtn = (ImageButton) titleArea.findViewById(R.id.ok_btn);
okBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do stuff here
finish();
}
});
okBtn.setVisibility(View.VISIBLE);
}
}

这里是 Activity 的相关布局:

<LinearLayout
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<LinearLayout
android:id="@+id/dialog_custom_title_area"
android:orientation="vertical"
android:fitsSystemWindows="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingRight="10dp">
<TextView
android:id="@+id/custom_title" style="?android:attr/windowTitleStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:minHeight="@dimen/abs__alert_dialog_title_height"
android:paddingLeft="16dip"
android:paddingRight="16dip"
android:textColor="#ffffff"
android:gravity="center_vertical|left" />

<ImageButton
android:id="@+id/ok_btn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:minWidth="@dimen/abs__action_button_min_width"
android:minHeight="@dimen/abs__alert_dialog_title_height"
android:scaleType="center"
android:src="@drawable/ic_action_accept"
android:background="@drawable/abs__item_background_holo_dark"
android:visibility="visible"
android:layout_gravity="center_vertical"
android:contentDescription="@string/acc_done"/>

<ImageButton
android:id="@+id/cancel_btn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:minWidth="@dimen/abs__action_button_min_width"
android:minHeight="@dimen/abs__alert_dialog_title_height"
android:scaleType="center"
android:src="@drawable/ic_action_cancel"
android:background="@drawable/abs__item_background_holo_dark"
android:visibility="visible"
android:layout_gravity="center_vertical"
android:contentDescription="@string/acc_cancel"
/>
</LinearLayout>
<View
android:id="@+id/dialog_title_divider"
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="@color/abs__holo_blue_light" />
</LinearLayout>

<RelativeLayout
android:id="@+id/list_suggestions_layout"
android:layout_height="wrap_content"
android:layout_width="fill_parent">

<!-- this is where the main dialog area is laid out -->

</RelativeLayout>

</LinearLayout>

最后,在我的 AndroidManifext.xml 中,这是我定义 TagActivity 的方式:

<activity 
android:icon="@drawable/ic_home"
android:name=".activity.TagActivity"
android:theme="@style/Theme.Sherlock.Dialog"/>

关于android - AlertDialog setCustomTitle 样式以匹配标准 AlertDialog 标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com