使android活动适合所有屏幕尺寸

时间:2014-02-22 10:59:09

标签: android xml android-layout

这是我活动的XML文件。

如何在不使图像按钮混乱的情况下使所有屏幕尺寸合适!

我使用 relative-layout ,我应该使用线性布局吗?

以下是我的代码。

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" 
android:background="@drawable/good">

<ImageButton
    android:id="@+id/ImageButton03"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageButton1"
    android:layout_alignTop="@+id/ImageButton01"
    android:background="@drawable/btn_blue"
    android:src="@drawable/plus" 
    android:onClick="NewCategory"/>

<ImageButton
    android:id="@+id/ImageButton01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/ImageButton02"
    android:layout_below="@+id/ImageButton02"
    android:layout_marginTop="29dp"
    android:background="@drawable/btn_blue"
    android:src="@drawable/plus"
    android:onClick="NewItem" />

<ImageButton
    android:id="@+id/ImageButton04"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/ImageButton01"
    android:layout_alignLeft="@+id/ImageButton03"
    android:background="@drawable/btn_blue"
    android:src="@drawable/call" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="سـوبر ماركت التنـور"
    android:textSize="40dp"
    android:background="@drawable/btn_red"
    android:textColor="@color/white" />

<ImageButton
    android:id="@+id/imageButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/button1"
    android:layout_below="@+id/button1"
    android:layout_marginTop="24dp"
    android:background="@drawable/btn_blue"
    android:onClick="ViewAllCategories"
    android:src="@drawable/cart" />

<ImageButton
    android:id="@+id/ImageButton05"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/ImageButton02"
    android:layout_alignLeft="@+id/button1"
    android:background="@drawable/btn_blue"
    android:onClick="CreateNewUserAccount"
    android:src="@drawable/user" />

<ImageButton
    android:id="@+id/ImageButton02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/ImageButton05"
    android:layout_below="@+id/imageButton1"
    android:layout_marginTop="33dp"
    android:background="@drawable/btn_blue"
    android:onClick="joinfacebook"
    android:src="@drawable/f" />

5 个答案:

答案 0 :(得分:1)

我认为你必须创建每个对象并以编程方式添加到布局中,并使用每个对象的比率。例如:您的屏幕比例是9/16。

height = size.y; width = ratio * height;

每个对象都将设置布局参数或边距参数,它们应该遵循此宽度和高度。

例如,使用您的一个按钮:

imageButton1 = new ImageView(this);
imageButton1.setBackgroundResource(R.drawable.abc);
imageButton1.setLayoutParams(new LayoutParams(width/100, height/100));
marginParams = new ViewGroup.MarginLayoutParams(imageButton1.getLayoutParams());
marginParams.setMargins(width/24, height/12, 0, 0);
layoutParams = new RelativeLayout.LayoutParams(marginParams);
imageButton1.setLayoutParams(layoutParams);
layout.addView(imageButton1);

答案 1 :(得分:0)

您必须为大屏幕编写xml代码。我认为您将xml文件保留在res/layout文件夹中。如果是,您可以保留三个文件夹来区分各种屏幕,例如res/layout-smallres/layoutres/layout-long。在这三个文件夹中,您可以为各种屏幕类型设置不同的对齐。对于中型屏幕,请将xml代码保留在布局中,对于小屏幕,请将其保存在layout-small等中,并设置在AndroidManifest.xml ...

<supports-screens
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"        
    android:anyDensity="true" />

答案 2 :(得分:0)

不要使用相对布局。使用weightSum的线性布局。

它在大多数设备中的工作。对于平板电脑,你必须在layout-sw600dp,layout-sw720dp文件夹中重新设计新的布局。

sample for weightSum

here is guidelines for design multiple screen size

此处的更多额外detils是Google I/O App下载代码并检查它。

答案 3 :(得分:0)

我更喜欢获取屏幕大小,然后在代码中以编程方式执行所有边距和大小。更多的工作,但更多的控制 举个例子,就像你拥有的一切,文本化,观察,位置......一样:

    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    int displayHeight = metrics.heightPixels;
    int displayWidth = metrics.widthPixels;
    float scaledDensity = metrics.scaledDensity;

    float percentageToMoveViewDown = (float) 20.0;
    float viewY_float = (float) ((displayHeight / 100.0) * percentageToMoveViewDown);
    int viewY_int = Math.round(viewY_float);

    RelativeLayout.LayoutParams view_Layout_params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    view_Layout_params.topMargin = viewY_int;
    view.setLayoutParams(view_Layout_params);

答案 4 :(得分:0)

最好和最简单的方法是右键单击android studio中的res文件夹,然后在资源管理器中按show

使用这些名称在res中创建四个不同的文件夹:

layout-normal

layout-large

layout-xlarge

layout

注意:完成此操作后,请确保您的xml位于具有确切文件夹名称的四个文件夹中,并根据您的偏好进行修改

删除AndroidManifest并保留其他四个

并将您的xml放入四个中,然后根据大小

在每个上修改它

现在终于在 <supports-screens android:resizeable="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" /> 添加以下内容

def get_request_session(driver):
    import requests
    session = requests.Session()
    for cookie in driver.get_cookies():
        session.cookies.set(cookie['name'], cookie['value'])

    return session