Android Studio中相对布局问题中按钮顶部的进度条 [英] progressbar on top of Button in relative layout issue in Android Studio

查看:85
本文介绍了Android Studio中相对布局问题中按钮顶部的进度条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,这很奇怪,我希望有人可以向我解释.

Ok this is a weird one I hope someone can explain to me.

我有一个自定义按钮布局,该布局创建了一个按钮,按钮中间有一个圆形进度条.我的XML代码如下.但是,我无法解决的问题是 ProgressBar 似乎出现在按钮后面.如果我将按钮背景设置为非透明以外的其他颜色,则无法看到进度条.在按钮背景为透明的情况下,我可以看到 ProgressBar ,但它仍显示在按钮文本的后面.我的理解是,视图按添加的顺序出现.我什至尝试将视图设置为顶部(view.bringToFront();),并尝试删除视图并重新创建它.

I have a custom button layout which creates a button with a circular progress bar in the middle of the button. My XML code is below. What I can't work out however is that the ProgressBar seems to be appearing behind the button. If I set the button background to anything other than transparent the progressbar cannot be seen. With the button background as transparent I can then see the ProgressBar but it still appears behind the button text. I was under the understanding that views appeared in the order they are added. I have even tried setting the view to be on top (view.bringToFront();) and I've tried removing the view and recreating it.

为什么进度条会出现在按钮后面,我该怎么解决?

Why does the progressbar appear behind the button and what can I do to solve it?

非常感谢

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:background="@android:color/holo_blue_bright"
    android:padding="2dp">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:text="Button"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:singleLine="true"
        android:clickable="false">
    </Button>

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:layout_centerInParent="true"
        android:visibility="visible"
        />

</RelativeLayout> 

使用上述布局的代码

 private void setupTableLayout(int NumberOfRows, int NumberOfButtons){
    TableLayout.LayoutParams tableParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT);
    TableRow.LayoutParams rowParams = new TableRow.LayoutParams(0, android.widget.TableRow.LayoutParams.MATCH_PARENT, 3f);
    TableLayout tableLayout = (TableLayout) findViewById(R.id.thetablelayout);
    tableLayout.removeAllViews();

    for (int i = 0; i < NumberOfRows; i++) {
        TableRow tableRow = new TableRow(this);
        tableRow.setLayoutParams(tableParams);

        RelativeLayout btnOneLayout = (RelativeLayout)getLayoutInflater().inflate(R.layout.custom_button, null);
        RelativeLayout btnTwoLayout = (RelativeLayout)getLayoutInflater().inflate(R.layout.custom_button, null);

        ProgressBar btnOneProgressBar = (ProgressBar)btnOneLayout.findViewById(R.id.progressBar);
        ProgressBar btnTwoProgressBar = (ProgressBar)btnTwoLayout.findViewById(R.id.progressBar);

        btnOneLayout.setLayoutParams(rowParams);
        btnTwoLayout.setLayoutParams(rowParams);

        Button btnOne = (Button)btnOneLayout.findViewById(R.id.button);
        btnOne.setText("Btn 1, Row " + i);
        btnOne.setId(1001 + i);
        Button btnTwo = (Button)btnTwoLayout.findViewById(R.id.button);
        btnTwo.setText("Btn 2, Row " + i);
        btnTwo.setId(2001 + i);

        setButtonClickListener(btnOneLayout, btnOneProgressBar);
        setButtonLongClickListener(btnOneLayout, btnOneProgressBar);

        tableRow.addView(btnOneLayout); //Add layout, instead of just Button

        View adivider = new View(this);
        adivider.setLayoutParams(new TableRow.LayoutParams(20, TableRow.LayoutParams.MATCH_PARENT));
        adivider.setBackgroundColor(Color.TRANSPARENT);

        // This bit of code deals with odd/even numbers of buttons.
        if (((i + 1) * 2) < NumberOfButtons + 1) {
            tableRow.addView(adivider);
            tableRow.addView(btnTwoLayout);
        } else {
            tableRow.addView(adivider);

            btnTwoLayout.setBackgroundResource(android.R.color.transparent); 
            tableRow.addView(btnTwoLayout);
        }


        tableLayout.addView(tableRow);

    }

}

推荐答案

您可能会在android> = 5.0上运行它.在5.0中,他们为视图添加了高程字段.海拔高度定义了ViewGroup中视图的z顺序.

You are propably running this on android >= 5.0. In 5.0 they added elevation field for views. Elevation defines z-order of views in ViewGroup.

在这种情况下,按钮的海拔高度值不为零,进度条的海拔高度值为零.

In that case button have non-zero elevation value and progress bar have zero value elevation.

将进度条的高程设置为例如10dp

Set elevation of progress bar to e.g. 10dp

<ProgressBar
    ...
    android:elevation="10dp"/>

这篇关于Android Studio中相对布局问题中按钮顶部的进度条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆