不同Android屏幕尺寸的按钮大小

时间:2016-04-16 10:13:49

标签: android android-layout

我有一个简单的布局,它只有2个小部件:全屏ImageView作为背景和Button。背景没有问题,但是,我没有定位&调整按钮大小以适合所有屏幕。该按钮应位于屏幕的2/3处,居中对齐。

这是我的activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context="hk.goodsight.kitchenlifestyle.LoginActivity">


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/bg_signin"
        android:contentDescription="background"
        android:scaleType="centerCrop"
        android:layout_centerHorizontal="true" />
    <Button
        android:layout_width="382dp"
        android:layout_height="66dp"
        android:text="@string/sign_in"
        android:id="@+id/btnLogin"
        android:background="@drawable/btn_signin"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="150dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_centerHorizontal="true"
        android:textColor="@android:color/white" />
</RelativeLayout>

从其他SO问题中,有些人推荐以下内容:

  1. 将px转换为dp,以计算按钮的大小和位置
  2. 针对不同的屏幕尺寸使用不同的布局
  3. 我应该选择哪个?

    P.S。必须支持Android 4.0,因此我不能将百分比用作保证金底部,这是在API 23中引入的。

2 个答案:

答案 0 :(得分:2)

我想有点天真的方法,但我已在许多设备上测试了这个预览,它显示了你想要的东西。我在父布局上设置了图像背景,而不是ImageView。将值替换为原始图像资源。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/ic_launcher"
android:orientation="vertical">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.3"/>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.3"
    android:orientation="vertical">

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="blah"
        android:textColor="@android:color/white" />
</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.3"/>

答案 1 :(得分:1)

您可以从WindowManager获取显示大小,然后将按钮边距顶部设置为编程的2/3分数,如:

android.view.Display display = ((android.view.WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    Button btn = new Button(this);
    LayoutParams params = new LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT
    );
    params.setMargins(0,(int)(display.getHeight()*0.666),0,0);
    btn.setLayoutParams(params);