从膨胀的布局更改TextView的属性

时间:2016-01-14 16:58:38

标签: java android xml android-layout

我有一个列表视图,其边距和填充我想根据屏幕密度改变,所以我需要在java而不是xml中设置这些属性,我试图给项目布局视图充气并获得它的内在TextView,但属性没有改变,这是我的代码:

这是活动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="com.onward.hemoapp.SearchDevicesActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="We've found the following devices:"
        android:id="@+id/devicesLabel"/>

    <ListView
        android:id="@layout/device_list"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:divider="@android:color/transparent"
        android:dividerHeight="20.0sp"
        android:layout_below="@+id/devicesLabel">

    </ListView>

</RelativeLayout>

这是项目布局

<?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:orientation="vertical"
    android:background="@drawable/list_selector">


    <TextView
        android:id="@+id/deviceId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:textColor="@drawable/list_selector">
    </TextView>

</LinearLayout>

这是我正在尝试的一段java代码

setContentView(R.layout.activity_search_devices);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
float scale=metrics.density;
devicesLabel=(TextView) findViewById(R.id.devicesLabel);
devicesLabel.setPadding((int) (20 * scale), (int) (15 * scale), 0, (int) (15 * scale));
devicesLabel.setTextSize(10 * scale);
LinearLayout deviceList=(LinearLayout)LayoutInflater.from(SearchDevicesActivity.this).inflate(R.layout.device_list, null);
TextView deviceId=(TextView) deviceList.findViewById(R.id.deviceId);
deviceId.setPadding((int) (20 * scale), (int)(15 * scale), 0, (int) (15 * scale));

TextView不会改变它的属性,我测试了很多其他的并且它保持不变

2 个答案:

答案 0 :(得分:0)

这个怎么样?

LinearLayout deviceList=(LinearLayout)LayoutInflater.from(SearchDevicesActivity.this).inflate(R.layout.device_list, null);
TextView deviceId=(TextView) deviceList.findViewById(R.id.deviceId);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) deviceId.getLayoutParams();
params.setPadding((int) (20 * scale), (int)(15 * scale), 0, (int) (15 * scale))
deviceId.setLayoutParams(params);

答案 1 :(得分:0)

您应该将它们放在密度特定的XML文件中,放在res/values-hdpi等文件夹中,然后在布局XML中引用它们。