0

我想将进度圈的宽度和高度设置为它旁边的项目的高度,一个按钮。最后,我想要一个高度和宽度相等的圆圈,占据搜索按钮的总高度 - 如果有更简单的方法,请告诉我。

我想这不能使用简单的 XML 来完成,所以我试图LayoutParamsOnCreate()我的活动功能中使用它:

LayoutParams lpe = search.getLayoutParams();
LayoutParams lpp = searchProgress.getLayoutParams();
lpp.width = lpe.height;
lpp.height = lpp.width;
Toast.makeText(getBaseContext(),"Width: "+lpp.width,Toast.LENGTH_LONG).show();
Toast.makeText(getBaseContext(),"Height: "+lpp.height,Toast.LENGTH_LONG).show();
searchProgress.setLayoutParams(lpp);

这不适用于宽度,但它适用于高度。我添加了 toasts 以查看一些调试信息。两者lpp.widthlpp.height都是-2。这意味着什么?这是 XML:

<Button
    android:id="@+id/searchButton"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/searchProgress"
    android:layout_alignTop="@+id/searchProgress"
    android:layout_toLeftOf="@+id/searchProgress"
    android:text="@string/searchButton" />

<ProgressBar
    android:id="@+id/searchProgress"
    style="?android:attr/progressBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/searchBar"
    android:layout_alignRight="@+id/searchResult"
    android:layout_alignTop="@+id/searchBar"
    android:indeterminate="true"
    android:indeterminateBehavior="repeat" />

按照这个 -2意思wrap_content。但是我不想拥有 XML 中的高度,我自己可以看到。我想要设备计算的高度。

我怎样才能让它工作?

4

2 回答 2

0

这是因为 Android 知道您想要定义大小的“常量”。

检查这个答案,我希望它对你有帮助:)

于 2013-05-14T07:53:30.433 回答
0

你可以试试这个

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Button searchButton = (Button) findViewById(R.id.searchButton);
    final ProgressBar searchProgress = (ProgressBar) findViewById(R.id.searchProgress);

    ViewTreeObserver vto = searchButton.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            searchProgress.setLayoutParams(new LinearLayout.LayoutParams(searchButton.getMeasuredWidth(), searchButton.getMeasuredHeight()));
        }
    });
}

这是快速而肮脏的解决方案,有时它可能会导致性能问题,当按钮大小取决于进度条大小时(它会创建循环依赖并可能导致无限循环)。

更实际和正确的解决方案是创建自定义视图,它由进度条和按钮组成。在此视图中覆盖 onMeasure,您可以显式控制其部分的大小。

于 2013-05-14T07:54:54.440 回答