是否可以使用setWeightSum(float)以编程方式更改weightSum值?

问题描述 投票:0回答:1

我正在尝试控制weightSum以实现片段的线性布局。我想知道是否可以使用setWeightSum(float)方法做到这一点。我试图控制ID为header_Linear的线性布局中的权重和。

<LinearLayout
android:id="@+id/header_Linear"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:orientation="horizontal"
android:weightSum="8">

        <TextView
            android:id="@+id/table_0.0"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:visibility="visible"
            android:background="@drawable/header_bg"/>

        <TextView
            android:id="@+id/table_0.1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:textAlignment="center"
            android:gravity="center"
            android:text="M"
            android:textColor="@color/colorTableItem"
            android:visibility="visible"
            android:background="@drawable/header_bg"/>

        <TextView
            android:id="@+id/table_0.2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="T"
            android:textColor="@color/colorTableItem"
            android:visibility="visible"
            android:background="@drawable/header_bg"/>

        <TextView
            android:id="@+id/table_0.3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="W"
            android:textColor="@color/colorTableItem"
            android:visibility="visible"
            android:background="@drawable/header_bg"/>

        <TextView
            android:id="@+id/table_0.4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="T"
            android:visibility="visible"
            android:textColor="@color/colorTableItem"
            android:background="@drawable/header_bg"/>

        <TextView
            android:id="@+id/table_0.5"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="F"
            android:visibility="visible"
            android:textColor="@color/colorTableItem"
            android:background="@drawable/header_bg"/>

        <TextView
            android:id="@+id/table_0.6"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="S"
            android:textColor="@color/colorTableItem"
            android:visibility="visible"
            android:background="@drawable/header_bg"/>

        <TextView
            android:id="@+id/table_0.7"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="S"
            android:textColor="@color/sunday_text_color"
            android:visibility="visible"
            android:background="@drawable/header_bg"/>
</LinearLayout>

这是我使用setWeightSum的片段

public class TimeTableFragment extends Fragment {

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    View root = inflater.inflate(R.layout.fragment_timetable, container, false);

    LinearLayout linearLayout = root.findViewById(R.id.header_Linear);

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(Objects.requireNonNull(getContext()));
    String header_value = sharedPreferences.getString("Header","0");
    Toast.makeText(getContext(),""+header_value,Toast.LENGTH_LONG).show();

    if (header_value.equals("0")){
        linearLayout.setWeightSum(6);
    }

    return root;
}

当我启动应用程序时,它崩溃了。我想知道是否有可能控制weightSum而不会出错。非常感谢你

Upup

即使我使用findViewById声明线性布局,我也得到nullPointException的原因是由于布局中的xmlns:android="http://schemas.android.com/apk/res/android"

在这种情况下,使用findViewById后,包含xmlns:android="http://schemas.android.com/apk/res/android"的视图将返回null]

我正在尝试控制weightSum以实现片段的线性布局。我想知道是否可以使用setWeightSum(float)方法做到这一点。我试图在id为...的线性布局中控制权重和...

java android android-studio android-linearlayout android-layout-weight
1个回答
1
投票
        public class TimeTableFragment extends Fragment {

        public View onCreateView(@NonNull LayoutInflater inflater,
                                 ViewGroup container, Bundle savedInstanceState) {

            View root = inflater.inflate(R.layout.fragment_timetable, container, false);

            return root;
        }

        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);

            LinearLayout linearLayout = view.findViewById(R.id.header_Linear);

            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(Objects.requireNonNull(getContext()));
            String header_value = sharedPreferences.getString("Header","0");
            Toast.makeText(getContext(),""+header_value,Toast.LENGTH_LONG).show();

            if (header_value.equals("0")){
                linearLayout.setWeightSum(6);
            }

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.