使用layout_gravity依赖于设备大小

时间:2018-04-10 09:00:04

标签: android android-layout

我有一个带有线性布局的布局XML文件。我想根据设备大小设置重力,但由于它是唯一依赖设备的值,我不想使用额外的布局文件。所以这是我的想法:

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="@attr/logo_gravity" # Should be screen size dependent
    android:gravity="center_horizontal"
    android:orientation="vertical">

我在values / dimens.xml中的值

 <attr name="logo_gravity">@attr/center_start</attr>

和sw600dp / dimens.xml

 <attr name="logo_gravity">@attr/center_horizontal</attr>

最后是我的attrs.xml

  <item name="center_start" type="integer">800003</item>
  <item name="center_horizontal" type="integer">1</item>

值为this网站形式。 但这似乎不起作用,因为布局文件中的layout_gravity标签似乎不接受这样的attrs。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不知道如何在xml中执行此操作,但以编程方式可能就是这样。

LinearLayout linearLayout = findViewById(R.id.ll_yourLinearLayout);
            if(isTablet()){
                linearLayout.setGravity(Gravity.CENTER);
            }else{
                linearLayout.setGravity(Gravity.LEFT);
            }

并找到设备平板电脑

private boolean isTablet() {

        Configuration config = getResources().getConfiguration();
        Class configClass = Configuration.class;
        boolean isTablet = false;
        boolean isTenInchTab = false;
        try {
            Field smallestWidthField = configClass.getDeclaredField("smallestScreenWidthDp");
            int smallestWidthValue = smallestWidthField.getInt(config);
            isTablet = smallestWidthValue >= 600;
            isTenInchTab = (isTablet && smallestWidthValue >= 720);
        } catch (Exception ex) {
            int currentLayout = config.screenLayout & config.SCREENLAYOUT_SIZE_MASK;
            isTablet = currentLayout >= Configuration.SCREENLAYOUT_SIZE_LARGE;
            isTenInchTab = (isTablet && currentLayout >= Configuration.SCREENLAYOUT_SIZE_XLARGE);

        }
        return isTablet;
    }

您还可以在res / values

中设置布尔值
<bool name="isHandest">false</bool>

内部值-sw600dp,values-sw720dp和values-xlarge

<bool name="isHandest">true</bool>

并在您的方法中

private boolean isTablet() {
    Resources res = getResources();
    return res.getBoolean(R.bool.enableQAurl);
}

所有这些代码都在您的活动中。希望这会有所帮助。