我有5个按钮,每个按钮的宽度不同,因为有些按钮的文本比其他文本多。
我希望它们对齐,但问题是如果屏幕很小,它们就不适合宽度(平板电脑看起来很完美,但在移动设备上看起来并不好看)
我如何实现如下图所示的内容?如果屏幕尺寸太小,则不适合在新线上自动移动的按钮,但是如果屏幕尺寸足够大以使它们全部排成一行。
layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hardwareAccelerated="true"
tools:context=".MainActivity" >
<WebView
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/button3"
android:hardwareAccelerated="true" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:src="@drawable/id_moduls" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:orientation="horizontal" >
<Button
android:id="@+id/btnbmwx6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="BMW X6" />
<Button
android:id="@+id/btnbmwz4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/btnbmwx6"
android:text="BMW Z4" />
<Button
android:id="@+id/btnbmw1s3d"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BMW 1s 3-Doors" />
<Button
android:id="@+id/btnbmw6sgrancoupe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="BMW 6s Gran Coupe" />
<Button
android:id="@+id/btnbmw5stouring"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BMW 5s Touring" />
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:0)
您是否使用wrap_content为每个按钮指定了宽度?并将它们放在水平的LinearLayout中? 向我们展示一些代码,这样可以更容易地检查问题
答案 1 :(得分:0)
如果您想使用Android版面引擎,最好将LinearLayout的weightSum
属性设置为5,并将每个子按钮的weight
设置为1,将layout_width
设置为“ 0像素”。如果你想为多个屏幕提供更灵活的东西,我为Android编写了一个布局引擎,可以大大改善你处理不同屏幕大小的不同视图的方式。该库名为AbLE,您可以下载它here。
要使用它,请在应用程序名为libs
的目录中创建一个文件,然后将文件able.jar
下载到libs
文件夹中。接下来,最简单的实施是您将Activity
设置为继承自(extend
)AbLEActivity
。接下来,使用以下代码创建一个名为Buttons.java
的新类:
@Layout
public class Buttons
{
public static CharSequence text = "button 1";
@Layout(viewClass="android.widget.Button")
public static class Btn1
{
public static void onLayoutComplete(AbLEActivity context, View v)
{
int[] size = new int[2];
AbLEUtil.getScreenSize(context, size);
ViewGroup.LayoutParams params = v.getLayoutParams();
params.width = size[0]/5;
v.setLayoutParams(params);
}
}
@Layout(viewClass="android.widget.Button")
public static class Btn2
{
public static CharSequence text = "button 2";
public static void onLayoutComplete(AbLEActivity context, View v)
{
int[] size = new int[2];
AbLEUtil.getScreenSize(context, size);
ViewGroup.LayoutParams params = v.getLayoutParams();
params.width = size[0]/5;
v.setLayoutParams(params);
v.setX(size[0]*1/5);
}
}
@Layout(viewClass="android.widget.Button")
public static class Btn3
{
public static CharSequence text = "button 3";
public static void onLayoutComplete(AbLEActivity context, View v)
{
int[] size = new int[2];
AbLEUtil.getScreenSize(context, size);
ViewGroup.LayoutParams params = v.getLayoutParams();
params.width = size[0]/5;
v.setLayoutParams(params);
v.setX(size[0]*2/5);
}
}
@Layout(viewClass="android.widget.Button")
public static class Btn4
{
public static CharSequence text = "button 4";
public static void onLayoutComplete(AbLEActivity context, View v)
{
int[] size = new int[2];
AbLEUtil.getScreenSize(context, size);
ViewGroup.LayoutParams params = v.getLayoutParams();
params.width = size[0]/5;
v.setLayoutParams(params);
v.setX(size[0]*3/5);
}
}
@Layout(viewClass="android.widget.Button")
public static class Btn5
{
public static CharSequence text = "button 5";
public static void onLayoutComplete(AbLEActivity context, View v)
{
int[] size = new int[2];
AbLEUtil.getScreenSize(context, size);
ViewGroup.LayoutParams params = v.getLayoutParams();
params.width = size[0]/5;
v.setLayoutParams(params);
v.setX(size[0]*4/5);
}
}
}
最后,在您的AndroidManifest.xml
中,将此元数据作为孩子添加到您的<Activity>
(即在意图过滤器下方):
<meta-data android:name="layout" android:value="com.yourpackage.android.Buttons" />
将com.yourpackage.android
替换为保存上述Buttons
类的包名称。{/ p>
现在删除活动中的行setContentView(...)
,然后运行该应用程序。您现在应该有一个白色视图,按钮按预期排列。如果您在XML文件中有更多布局,则可以通过将此行添加到Buttons.java
的末尾,轻松将其添加到布局中:
@XMLLayout(resourceID="main")//call this whatever your layout file is (removing the R.layout. part)
public static class InnerXML{}