簡體   English   中英

根據寬度更改按鈕的高度[Android]

[英]Change button height depending on width [Android]

我在Android Studio遇到按鈕問題。 我希望某些按鈕為正方形,並且同時具有基於weightnon-fix width 我的意思是:

android:layout_width="0dip"
android:layout_weight="0.5"
android:layout_height="wrap_content"

我在這里尋找答案,但是沒有一個對我有用。 我知道不可能通過XML做到這一點,所以我在Java代碼中嘗試了btn.getWidth()btn.getLayoutParams().width ...,但是它們都return 0作為值。

任何想法?

如果要通過代碼設置按鈕大小,則應執行以下操作(在擴展Button的類中):

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int width = getMeasuredWidth();
    int height = width;
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);}

要么

    @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    int width = getMeasuredWidth();
    int height = width;
    setMeasuredDimension(width, height);
}

但是有一種更好的方法:為所有dpi創建正方形png並將其設置為按鈕的背景。

使用以下偵聽器:

ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
       view.getViewTreeObserver().removeOnGlobalLayoutListener(this);

       //Here you can get and set the TextViews size.
    }
 });
}

之所以得到0,是因為在您檢查視圖時未進行度量。 為確保獲得實際視圖,可以使用此偵聽器。

我在最后測試了該代碼。 就在onCreate()結束之前。 只需寫下這些行。

Button button= (Button ) findViewById(R.id.button);
button.post(new Runnable() {

            @Override
            public void run() {

                Log.e("",""+button.getHeight()+" "+button.getWidth());
            }
        });

如果您有任何疑問,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM