تخطيط Android Right Right
-
29-09-2019 - |
سؤال
لدي التصميم التالي في مكانه
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1">
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview" android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="13">
<LinearLayout android:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<ImageButton android:background="@null" android:id="@+id/back" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/back" android:padding="10dip" />
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<ImageButton android:background="@null" android:id="@+id/forward" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/forward" android:padding="10dip" />
</LinearLayout>
</LinearLayout>
<RelativeLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" >
<ImageButton android:background="@null" android:id="@+id/special" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/barcode" android:padding="10dip" android:layout_gravity="right"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
لغرض هذا السؤال ، أنا قلق فقط بشأن النصف السفلي من التصميم. الآن يحتوي على 3 ImageButtons. الأول 2 ، أريد بجوار بعضها البعض محاذاة. الثالث ، أريد أن أتوافق مع الجانب الأيمن.
كما هو الحال ، فإن الأزرار الأولى هي المكان الذي أريد أن يكونوا فيه ، لكن الثالث يبقى على اليسار. كيف يمكنني جعلها محاذاة بشكل صحيح.
المحلول
التصميم غير فعال للغاية ومتضخم. أنت لا تحتاج إلى الكثير LinearLayout
س. في الواقع لا تحتاج إلى أي LinearLayout
على الاطلاق.
استخدم واحدة فقط RelativeLayout
. مثله.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageButton android:background="@null"
android:id="@+id/back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/back"
android:padding="10dip"
android:layout_alignParentLeft="true"/>
<ImageButton android:background="@null"
android:id="@+id/forward"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/forward"
android:padding="10dip"
android:layout_toRightOf="@id/back"/>
<ImageButton android:background="@null"
android:id="@+id/special"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/barcode"
android:padding="10dip"
android:layout_alignParentRight="true"/>
</RelativeLayout>
نصائح أخرى
يمكنك أن تفعل كل ذلك باستخدام واحد فقط RelativeLayout
(الذي ، راجع للشغل ، لا تحتاج android:orientation
معامل). لذا ، بدلاً من وجود ملف LinearLayout
, ، التي تحتوي على مجموعة من الأشياء ، يمكنك أن تفعل شيئًا مثل:
<RelativeLayout>
<ImageButton
android:layout_width="wrap_content"
android:id="@+id/the_first_one"
android:layout_alignParentLeft="true"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_toRightOf="@+id/the_first_one"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_alignParentRight="true"/>
</RelativeLayout>
كما لاحظت ، هناك بعض معلمات XML مفقودة. كنت أعرض فقط المعلمات الأساسية التي كان عليك وضعها. يمكنك إكمال الباقي.
إذا كنت تريد استخدام LinearLayout, ، يمكنك القيام بالتوافق مع layout_weight
مع Space
عنصر.
مثل أماكن التخطيط التالية textView
و textView2
بجانب بعضنا البعض و textView3
سيكون محاذاة اليمين
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView2" />
<Space
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView3" />
</LinearLayout>
يمكنك تحقيق نفس التأثير بدون Space
إذا كنت ستضع layout_weight
إلى textView2
. إنه فقط أحب الأشياء أكثر انفصالًا ، بالإضافة إلى التظاهر Space
عنصر.
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView2" />
لاحظ أن يجب عليك (لا يجب) تعيين layout_width
صراحة لأنه سيتم إعادة حسابه وفقًا لوزنه على أي حال (نفس الطريقة التي يجب أن تضع بها ارتفاع في عناصر الرأسية LinearLayout
). للحصول على نصائح أداء تخطيط أخرى انظر أندرويد تخطيط الحيل سلسلة.
هذا مثال على أ تخطيط نسبي:
RelativeLayout relativeLayout=(RelativeLayout)vi.findViewById(R.id.RelativeLayoutLeft);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)relativeLayout.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
relativeLayout.setLayoutParams(params);
مع نوع آخر من التصميم (مثال LinearLayout) عليك فقط أن تتغير تخطيط نسبي إلى عن على LinearLayout.
لدعم مساحة الإصدار الأقدم يمكن استبدالها بعرض ما أدناه. أضف هذا العرض بين ما بعد اليسار الأكثر مكونًا وقبل معظم المكونات اليمنى. هذا العرض بالوزن = 1 سوف يمتد ويملأ المساحة
<View
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1" />
ويرد رمز العينة الكامل هنا. لديها 4 مكونات. سيكون سهمان على الجانب الأيمن واليسرى. سيكون النص والدوران في الوسط.
<ImageButton
android:id="@+id/btnGenesis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|center_vertical"
android:layout_marginBottom="2dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="2dp"
android:background="@null"
android:gravity="left"
android:src="@drawable/prev" />
<View
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1" />
<TextView
android:id="@+id/lblVerseHeading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:textSize="25sp" />
<Spinner
android:id="@+id/spinnerVerses"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:gravity="center"
android:textSize="25sp" />
<View
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1" />
<ImageButton
android:id="@+id/btnExodus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|center_vertical"
android:layout_marginBottom="2dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="2dp"
android:background="@null"
android:gravity="right"
android:src="@drawable/next" />
</LinearLayout>