我有一个带有线性布局的布局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。 有什么想法吗?
答案 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);
}
所有这些代码都在您的活动中。希望这会有所帮助。