Loading core/java/android/widget/LinearLayout.java +51 −38 Original line number Diff line number Diff line Loading @@ -1331,7 +1331,7 @@ public class LinearLayout extends ViewGroup { void layoutVertical() { final int paddingLeft = mPaddingLeft; int childTop = mPaddingTop; int childTop; int childLeft; // Where right end of child should go Loading @@ -1346,19 +1346,21 @@ public class LinearLayout extends ViewGroup { final int majorGravity = mGravity & Gravity.VERTICAL_GRAVITY_MASK; final int minorGravity = mGravity & Gravity.HORIZONTAL_GRAVITY_MASK; if (majorGravity != Gravity.TOP) { switch (majorGravity) { case Gravity.BOTTOM: // mTotalLength contains the padding already, we add the top // padding to compensate childTop = mBottom - mTop + mPaddingTop - mTotalLength; // mTotalLength contains the padding already childTop = mPaddingTop + mBottom - mTop - mTotalLength; break; // mTotalLength contains the padding already case Gravity.CENTER_VERTICAL: childTop += ((mBottom - mTop) - mTotalLength) / 2; childTop = mPaddingTop + (mBottom - mTop - mTotalLength) / 2; break; } case Gravity.TOP: default: childTop = mPaddingTop; break; } for (int i = 0; i < count; i++) { Loading @@ -1378,10 +1380,6 @@ public class LinearLayout extends ViewGroup { } switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: childLeft = paddingLeft + lp.leftMargin; break; case Gravity.CENTER_HORIZONTAL: childLeft = paddingLeft + ((childSpace - childWidth) / 2) + lp.leftMargin - lp.rightMargin; Loading @@ -1390,8 +1388,10 @@ public class LinearLayout extends ViewGroup { case Gravity.RIGHT: childLeft = childRight - childWidth - lp.rightMargin; break; case Gravity.LEFT: default: childLeft = paddingLeft; childLeft = paddingLeft + lp.leftMargin; break; } Loading @@ -1418,10 +1418,11 @@ public class LinearLayout extends ViewGroup { * @see #onLayout(boolean, int, int, int, int) */ void layoutHorizontal() { final boolean isLayoutRtl = isLayoutRtl(); final int paddingTop = mPaddingTop; int childTop; int childLeft = mPaddingLeft; int childLeft; // Where bottom of child should go final int height = mBottom - mTop; Loading @@ -1440,25 +1441,37 @@ public class LinearLayout extends ViewGroup { final int[] maxAscent = mMaxAscent; final int[] maxDescent = mMaxDescent; if (majorGravity != Gravity.LEFT) { switch (majorGravity) { case Gravity.RIGHT: // mTotalLength contains the padding already, we add the left // padding to compensate childLeft = mRight - mLeft + mPaddingLeft - mTotalLength; // mTotalLength contains the padding already childLeft = mPaddingLeft + mRight - mLeft - mTotalLength; break; case Gravity.CENTER_HORIZONTAL: childLeft += ((mRight - mLeft) - mTotalLength) / 2; // mTotalLength contains the padding already childLeft = mPaddingLeft + (mRight - mLeft - mTotalLength) / 2; break; case Gravity.LEFT: default: childLeft = mPaddingLeft; break; } int start = 0; int dir = 1; //In case of RTL, start drawing from the last child. if (isLayoutRtl) { start = count - 1; dir = -1; } for (int i = 0; i < count; i++) { final View child = getVirtualChildAt(i); int childIndex = start + dir * i; final View child = getVirtualChildAt(childIndex); if (child == null) { childLeft += measureNullChild(i); childLeft += measureNullChild(childIndex); } else if (child.getVisibility() != GONE) { final int childWidth = child.getMeasuredWidth(); final int childHeight = child.getMeasuredHeight(); Loading Loading @@ -1512,7 +1525,7 @@ public class LinearLayout extends ViewGroup { break; } if (hasDividerBeforeChildAt(i)) { if (hasDividerBeforeChildAt(childIndex)) { childLeft += mDividerWidth; } Loading @@ -1522,7 +1535,7 @@ public class LinearLayout extends ViewGroup { childLeft += childWidth + lp.rightMargin + getNextLocationOffset(child); i += getChildrenSkipCount(child, i); i += getChildrenSkipCount(child, childIndex); } } } Loading tests/BiDiTests/AndroidManifest.xml +32 −7 Original line number Diff line number Diff line Loading @@ -14,18 +14,14 @@ limitations under the License. --> <!-- Declare the contents of this Android application. The namespace attribute brings in the Android platform namespace, and the package supplies a unique name for the application. When writing your own application, the package name must be changed from "com.example.*" to come from a domain that you own or have control over. --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.bidi" android:versionCode="1" android:versionName="1.0"> <application android:label="BiDiTests"> <activity android:name="BiDiTestActivity" <activity android:name=".BiDiTestActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> Loading @@ -33,5 +29,34 @@ </intent-filter> </activity> <activity android:name=".BiDiTestBasicActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> <activity android:name=".BiDiTestCanvasActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> <activity android:name=".BiDiTestLinearLayoutLtrActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> <activity android:name=".BiDiTestLinearLayoutRtlActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> </application> </manifest> No newline at end of file tests/BiDiTests/res/layout/biditest_main.xml→tests/BiDiTests/res/layout/basic.xml +2 −14 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ android:layout_height="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> Loading @@ -39,7 +39,7 @@ android:text="@string/textview_text" /> <EditText android:id="@+id/textview" <EditText android:id="@+id/edittext" android:layout_height="wrap_content" android:layout_width="match_parent" android:textSize="32dip" Loading @@ -47,16 +47,4 @@ </LinearLayout> <SeekBar android:id="@+id/seekbar" android:layout_height="wrap_content" android:layout_width="match_parent" /> <view class="com.android.bidi.BiDiTestView" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FF0000" /> </LinearLayout> No newline at end of file tests/BiDiTests/res/layout/canvas.xml 0 → 100644 +34 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2011 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <SeekBar android:id="@+id/seekbar" android:layout_height="wrap_content" android:layout_width="match_parent" /> <view class="com.android.bidi.BiDiTestView" android:id="@+id/testview" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FF0000" /> </LinearLayout> No newline at end of file tests/BiDiTests/res/layout/linear_layout_ltr.xml 0 → 100644 +186 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2011 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layouttest" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:horizontalDirection="ltr"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="inherit"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="ltr"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="rtl"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="inherit"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="ltr"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="rtl"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> </LinearLayout> No newline at end of file Loading
core/java/android/widget/LinearLayout.java +51 −38 Original line number Diff line number Diff line Loading @@ -1331,7 +1331,7 @@ public class LinearLayout extends ViewGroup { void layoutVertical() { final int paddingLeft = mPaddingLeft; int childTop = mPaddingTop; int childTop; int childLeft; // Where right end of child should go Loading @@ -1346,19 +1346,21 @@ public class LinearLayout extends ViewGroup { final int majorGravity = mGravity & Gravity.VERTICAL_GRAVITY_MASK; final int minorGravity = mGravity & Gravity.HORIZONTAL_GRAVITY_MASK; if (majorGravity != Gravity.TOP) { switch (majorGravity) { case Gravity.BOTTOM: // mTotalLength contains the padding already, we add the top // padding to compensate childTop = mBottom - mTop + mPaddingTop - mTotalLength; // mTotalLength contains the padding already childTop = mPaddingTop + mBottom - mTop - mTotalLength; break; // mTotalLength contains the padding already case Gravity.CENTER_VERTICAL: childTop += ((mBottom - mTop) - mTotalLength) / 2; childTop = mPaddingTop + (mBottom - mTop - mTotalLength) / 2; break; } case Gravity.TOP: default: childTop = mPaddingTop; break; } for (int i = 0; i < count; i++) { Loading @@ -1378,10 +1380,6 @@ public class LinearLayout extends ViewGroup { } switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: childLeft = paddingLeft + lp.leftMargin; break; case Gravity.CENTER_HORIZONTAL: childLeft = paddingLeft + ((childSpace - childWidth) / 2) + lp.leftMargin - lp.rightMargin; Loading @@ -1390,8 +1388,10 @@ public class LinearLayout extends ViewGroup { case Gravity.RIGHT: childLeft = childRight - childWidth - lp.rightMargin; break; case Gravity.LEFT: default: childLeft = paddingLeft; childLeft = paddingLeft + lp.leftMargin; break; } Loading @@ -1418,10 +1418,11 @@ public class LinearLayout extends ViewGroup { * @see #onLayout(boolean, int, int, int, int) */ void layoutHorizontal() { final boolean isLayoutRtl = isLayoutRtl(); final int paddingTop = mPaddingTop; int childTop; int childLeft = mPaddingLeft; int childLeft; // Where bottom of child should go final int height = mBottom - mTop; Loading @@ -1440,25 +1441,37 @@ public class LinearLayout extends ViewGroup { final int[] maxAscent = mMaxAscent; final int[] maxDescent = mMaxDescent; if (majorGravity != Gravity.LEFT) { switch (majorGravity) { case Gravity.RIGHT: // mTotalLength contains the padding already, we add the left // padding to compensate childLeft = mRight - mLeft + mPaddingLeft - mTotalLength; // mTotalLength contains the padding already childLeft = mPaddingLeft + mRight - mLeft - mTotalLength; break; case Gravity.CENTER_HORIZONTAL: childLeft += ((mRight - mLeft) - mTotalLength) / 2; // mTotalLength contains the padding already childLeft = mPaddingLeft + (mRight - mLeft - mTotalLength) / 2; break; case Gravity.LEFT: default: childLeft = mPaddingLeft; break; } int start = 0; int dir = 1; //In case of RTL, start drawing from the last child. if (isLayoutRtl) { start = count - 1; dir = -1; } for (int i = 0; i < count; i++) { final View child = getVirtualChildAt(i); int childIndex = start + dir * i; final View child = getVirtualChildAt(childIndex); if (child == null) { childLeft += measureNullChild(i); childLeft += measureNullChild(childIndex); } else if (child.getVisibility() != GONE) { final int childWidth = child.getMeasuredWidth(); final int childHeight = child.getMeasuredHeight(); Loading Loading @@ -1512,7 +1525,7 @@ public class LinearLayout extends ViewGroup { break; } if (hasDividerBeforeChildAt(i)) { if (hasDividerBeforeChildAt(childIndex)) { childLeft += mDividerWidth; } Loading @@ -1522,7 +1535,7 @@ public class LinearLayout extends ViewGroup { childLeft += childWidth + lp.rightMargin + getNextLocationOffset(child); i += getChildrenSkipCount(child, i); i += getChildrenSkipCount(child, childIndex); } } } Loading
tests/BiDiTests/AndroidManifest.xml +32 −7 Original line number Diff line number Diff line Loading @@ -14,18 +14,14 @@ limitations under the License. --> <!-- Declare the contents of this Android application. The namespace attribute brings in the Android platform namespace, and the package supplies a unique name for the application. When writing your own application, the package name must be changed from "com.example.*" to come from a domain that you own or have control over. --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.bidi" android:versionCode="1" android:versionName="1.0"> <application android:label="BiDiTests"> <activity android:name="BiDiTestActivity" <activity android:name=".BiDiTestActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> Loading @@ -33,5 +29,34 @@ </intent-filter> </activity> <activity android:name=".BiDiTestBasicActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> <activity android:name=".BiDiTestCanvasActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> <activity android:name=".BiDiTestLinearLayoutLtrActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> <activity android:name=".BiDiTestLinearLayoutRtlActivity" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> </application> </manifest> No newline at end of file
tests/BiDiTests/res/layout/biditest_main.xml→tests/BiDiTests/res/layout/basic.xml +2 −14 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ android:layout_height="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> Loading @@ -39,7 +39,7 @@ android:text="@string/textview_text" /> <EditText android:id="@+id/textview" <EditText android:id="@+id/edittext" android:layout_height="wrap_content" android:layout_width="match_parent" android:textSize="32dip" Loading @@ -47,16 +47,4 @@ </LinearLayout> <SeekBar android:id="@+id/seekbar" android:layout_height="wrap_content" android:layout_width="match_parent" /> <view class="com.android.bidi.BiDiTestView" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FF0000" /> </LinearLayout> No newline at end of file
tests/BiDiTests/res/layout/canvas.xml 0 → 100644 +34 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2011 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <SeekBar android:id="@+id/seekbar" android:layout_height="wrap_content" android:layout_width="match_parent" /> <view class="com.android.bidi.BiDiTestView" android:id="@+id/testview" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FF0000" /> </LinearLayout> No newline at end of file
tests/BiDiTests/res/layout/linear_layout_ltr.xml 0 → 100644 +186 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2011 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layouttest" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:horizontalDirection="ltr"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="inherit"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="ltr"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="rtl"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="inherit"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="ltr"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:horizontalDirection="rtl"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button1_text" android:textSize="32dip" /> <TextView android:id="@+id/textview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textSize="32dip" android:text="@string/textview_text" /> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button2_text" android:textSize="32dip" /> </LinearLayout> </LinearLayout> No newline at end of file