Учитывая, что есть новый интерес к этому questi позвольте мне подробно рассказать о том, как я «решил» это.
Во-первых, я использую ActionBarSherlock в своем приложении. Это не обязательно, я полагаю, хотя это очень помогает, потому что стили и темы, определенные в проекте ABS, позволяют мне подражать теме Holo на устройствах до ICS, что обеспечивает последовательный опыт в приложении.
Во-вторых, мое «диалоговое окно» больше не является диалогом - это действие, называемое диалогом. Это упрощает манипулирование иерархией представлений, потому что у меня есть полный контроль. Таким образом, добавление кнопок в область заголовка теперь тривиально.
Вот скриншоты (2.2 эмулятор устройства и 4.1). Обратите внимание, что единственное существенное отличие стиля - это EditText, который я выбрал не для адреса.
![4.1 emulator](https://i.stack.imgur.com/gXUpH.png)
Вот мой 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);
}
}
А вот соответствующий макет для деятельности:
<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"/>
Я думаю, вы неправильно поняли, что я ищу. Я добавил некоторые ссылки на изображения для ясности. – mikejonesguy
Надеюсь, это ответит на ваш вопрос. – sdfwer
Нет, я думаю, вы все еще не поняли проблему. (См. Мое последнее редактирование.) Зона заголовка диалогового окна недоступна мне по идентификатору, поэтому я не могу просто добавить к нему свои кнопки. Я должен использовать setCustomTitle (View view), который ** заменяет ** существующую область заголовка. – mikejonesguy