Android-如何将视图的高度从底部扩展到顶部?

时间:2019-05-01 21:22:23

标签: java android

我正在尝试使用垂直条形图对Android中的某些数据进行可视化,但是当我通过单击按钮以编程方式增大或减小View的高度时,其高度会从上到下变化,如下图所示(默认值为300)。

如何从底部到顶部更改高度,即保持视图的底部固定?

预期结果:

enter image description here

我在Java中的代码:

public final class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_main);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        LinearLayout layoutXAxis = (LinearLayout)this.findViewById(R.id.layoutX);
        LinearLayout layoutYAxis = (LinearLayout)this.findViewById(R.id.layoutY);
        LinearLayout layoutZAxis = (LinearLayout)this.findViewById(R.id.layoutZ);

        TextView txtXAxis = (TextView)layoutXAxis.findViewById(R.id.txtXAxis);
        TextView txtYAxis = (TextView)layoutYAxis.findViewById(R.id.txtYAxis);
        TextView txtZAxis = (TextView)layoutZAxis.findViewById(R.id.txtZAxis);

        View graphXAxis = (View)layoutXAxis.findViewById(R.id.XAxis);
        View graphYAxis = (View)layoutYAxis.findViewById(R.id.YAxis);
        View graphZAxis = (View)layoutZAxis.findViewById(R.id.ZAxis);

        LinearLayout layoutBtnAdd = (LinearLayout)this.findViewById(R.id.layAdd);
        Button btnAddX = (Button)layoutBtnAdd.findViewById(R.id.btnXAdd);
        Button btnAddY = (Button)layoutBtnAdd.findViewById(R.id.btnYAdd);
        Button btnAddZ = (Button)layoutBtnAdd.findViewById(R.id.btnZAdd);

        LinearLayout layoutBtnSub = (LinearLayout)this.findViewById(R.id.laySub);
        Button btnSubX = (Button)layoutBtnSub.findViewById(R.id.btnXSub);
        Button btnSubY = (Button)layoutBtnSub.findViewById(R.id.btnYSub);
        Button btnSubZ = (Button)layoutBtnSub.findViewById(R.id.btnZSub);

        txtXAxis.setText(String.valueOf(graphXAxis.getLayoutParams().height));
        txtYAxis.setText(String.valueOf(graphYAxis.getLayoutParams().height));
        txtZAxis.setText(String.valueOf(graphZAxis.getLayoutParams().height));

        btnAddX.setOnClickListener((OnClickListener)(new OnClickListener() {
          public final void onClick(View it) {
             View graph = graphXAxis;
             LayoutParams params = graph.getLayoutParams();
             params.height += 10;
             graph = graphXAxis;
             graph.setLayoutParams(params);

             TextView text = txtXAxis;
             View graph = graphXAxis;
             text.setText(String.valueOf(graph.getLayoutParams().height));
          }
       }));

       ... // onClickListener of the other buttons
}

我的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"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:context=".MainActivity">

    <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:id="@+id/layoutY">
        <TextView
                android:id="@+id/txtYAxis"
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:textAlignment="center"
                android:text="Y AXIS"
                android:textStyle="bold"
                android:textSize="18sp"
                android:textColor="@android:color/holo_blue_light"/>
    ...
        <View android:id="@+id/YAxis"
              android:layout_width="75dp"
              android:layout_height="200dp"
              android:background="@android:color/holo_blue_dark"/>
    </LinearLayout>


    <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/layoutX"

            android:layout_toLeftOf="@id/layoutY"
            android:layout_toStartOf="@id/layoutY"
            android:layout_marginRight="50dp"
            android:layout_marginEnd="50dp">
        <TextView
                android:id="@+id/txtXAxis"
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:textAlignment="center"
                android:text="X AXIS"
                android:textStyle="bold"
                android:textSize="18sp"
                android:textColor="@android:color/holo_red_light"/>
        ...
        <View android:id="@+id/XAxis"
              android:layout_width="75dp"
              android:layout_height="200dp"
              android:background="@android:color/holo_red_dark"/>
    </LinearLayout>

    <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/layoutZ"

            android:layout_toRightOf="@id/layoutY"
            android:layout_toEndOf="@id/layoutY"
            android:layout_marginLeft="50dp"
            android:layout_marginStart="50dp">
        <TextView
                android:id="@+id/txtZAxis"
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:textAlignment="center"
                android:text="Z AXIS"
                android:textStyle="bold"
                android:textSize="18sp"
                android:textColor="@android:color/holo_green_light"/>
        ...
        <View android:id="@+id/ZAxis"
              android:layout_width="75dp"
              android:layout_height="200dp"
              android:background="@android:color/holo_green_dark"/>
    </LinearLayout>

    ...
</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

您可以考虑如下构建布局。

<?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="wrap_content"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button_layout"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/layoutY"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txtYAxis"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:text="Y AXIS"
                android:textColor="@android:color/holo_blue_light"
                android:textSize="18sp"
                android:textStyle="bold" />

            <View
                android:id="@+id/YAxis"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                android:background="@android:color/holo_blue_dark"
                android:gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/layoutX"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|bottom"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txtXAxis"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="X AXIS"
                android:textAlignment="center"
                android:textColor="@android:color/holo_red_light"
                android:textSize="18sp"
                android:textStyle="bold" />

            <View
                android:id="@+id/XAxis"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                android:background="@android:color/holo_red_dark" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/layoutZ"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|bottom"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txtZAxis"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="Z AXIS"
                android:textAlignment="center"
                android:textColor="@android:color/holo_green_light"
                android:textSize="18sp"
                android:textStyle="bold" />

            <View
                android:id="@+id/ZAxis"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="30dp"
                android:background="@android:color/holo_green_dark" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/button_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

这是输出。

enter image description here

希望有帮助!