จากแหล่งที่มาของแอป ioschedฉันได้สร้างButtonBar
คลาสนี้ขึ้นมา:
/**
* An extremely simple {@link LinearLayout} descendant that simply reverses the
* order of its child views on Android 4.0+. The reason for this is that on
* Android 4.0+, negative buttons should be shown to the left of positive buttons.
*/
public class ButtonBar extends LinearLayout {
public ButtonBar(Context context) {
super(context);
}
public ButtonBar(Context context, AttributeSet attributes) {
super(context, attributes);
}
public ButtonBar(Context context, AttributeSet attributes, int def_style) {
super(context, attributes, def_style);
}
@Override
public View getChildAt(int index) {
if (_has_ics)
// Flip the buttons so that "OK | Cancel" becomes "Cancel | OK" on ICS
return super.getChildAt(getChildCount() - 1 - index);
return super.getChildAt(index);
}
private final static boolean _has_ics = Build.VERSION.SDK_INT >=
Build.VERSION_CODES.ICE_CREAM_SANDWICH;
}
นี่คือLinearLayout
ปุ่ม "ตกลง" และ "ยกเลิก" และจะจัดการวางตามลำดับที่เหมาะสม จากนั้นวางสิ่งนี้ในเค้าโครงที่คุณต้องการให้ปุ่มใน:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="?android:attr/dividerHorizontal"
android:orientation="vertical"
android:showDividers="middle">
<!--- A view, this approach only works with a single view here -->
<your.package.ButtonBar style="?android:attr/buttonBarStyle"
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1.0">
<Button style="?android:attr/buttonBarButtonStyle"
android:id="@+id/ok_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/ok_button" />
<Button style="?android:attr/buttonBarButtonStyle"
android:id="@+id/cancel_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/cancel_button" />
</your.package.ButtonBar>
</LinearLayout>
สิ่งนี้ทำให้คุณมีรูปลักษณ์ของกล่องโต้ตอบที่มีปุ่มไร้ขอบ คุณสามารถค้นหาแอตทริบิวต์เหล่านี้ได้ใน res ในกรอบ buttonBarStyle
ตัวแบ่งแนวตั้งและช่องว่างภายใน buttonBarButtonStyle
ถูกตั้งค่าborderlessButtonStyle
สำหรับธีม Holo แต่ฉันเชื่อว่านี่น่าจะเป็นวิธีที่มีประสิทธิภาพที่สุดในการแสดงตามที่เฟรมเวิร์กต้องการแสดง