2014-02-08 30 views
2

聲明:我重寫了這個問題的大部分內容,包括標題,因爲我已經部分地理解了它。窗口中可用空間的大小(不包括操作欄和邊距)


我想最大化所有屏幕尺寸的按鈕的大小,因爲它看起來愚蠢的,當它是小的。它應類似於此:

(可悲的是,我不能包括圖片,因爲我的名聲太低)

但是,如果我打開設備的方向,例如,按鈕火柴這是父母的寬度,變得比例醜陋。

(可悲的是,我不能包括圖片,因爲我的名聲太低。)

我現在已經知道如何得到它的母公司(中的LinearLayout)的尺寸,以及如何設置按鈕尺寸。我用下面的代碼:

  • 窗口是包含的LinearLayout(僅)按鈕的ID。
  • 此代碼位於onCreate() - MainActivity的方法。

    // Adapt button's size to smaller dimension: 
    final View window = findViewById(R.id.window); 
    window.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         int width = window.getMeasuredWidth(); 
         int height = window.getMeasuredHeight(); 
         int smallerSize; 
    
         if (width < height) { 
          smallerSize = width; 
         } else { 
          smallerSize = height; 
         } 
    
         View button = findViewById(R.id.fartButton); 
         button.setLayoutParams(new LinearLayout.LayoutParams(smallerSize, smallerSize)); 
    
         window.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
        } 
    }); 
    

這種方法的問題是,它似乎並沒有考慮到填充。按鈕get在較小的一側(縱向模式下的寬度,橫向模式下的高度)切斷一點點。
有趣的是,按鈕內的圖像非常適合窗口。例如,如果高度被切掉了一點,圖像仍然可以看到它的全部高度(只有一些「額外」部分的按鈕被切斷,像一個小小的邊框和陰影)。

有沒有辦法讓按鈕的最大尺寸,這將是窗口的大小,但沒有操作欄和減號填充,以防止按鈕的任何部分被切斷?

回答

1

我只是想通了。比我想象的要容易得多。不過感謝所有回答的人。它在路上幫了我很多!


施加到窗口可以很容易地通過getPadding accesed的填充...()方法。我只需要調整其中寬度和高度得到保存的部分:

int width = window.getMeasuredWidth() - window.getPaddingLeft() - window.getPaddingRight(); 
int height = window.getMeasuredHeight() - window.getPaddingTop() - window.getPaddingBottom(); 

我想,即使通過手動排除填充,按下按鈕時,亮點會被切斷,因爲它是一個大一點比按鈕本身。但這是而不是的情況下,它的作品完美。現在按鈕顯示在其整個榮耀。 ;)

1

你上面的例子「應類似於此:」似乎沒有加載了,說明將幫助...

但是你可以使用Android屏幕管理比例相當不錯:layout_weight

我不敢肯定我設想您的實際需要,但你可以嘗試這樣的:

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="X" 
     android:text=" " 
     /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="button" 
     /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="X" 
     android:text=" " 
     /> 
</LinearLayout> 

其中用於X的不同值將控制您的視圖按鈕水平的縱橫比。

+0

感謝您的回覆。我已爲圖像重新添加了免責聲明。你有一個非常有趣的方法!但是,如果你明白我的意思,這不是一種「乾淨」的方法。 ;)這也不能控制高度,所以按鈕仍然可能會「扭曲」。我需要一種方法來檢查,如果按鈕不是方形的,並在必要時進行調整。 – J0hj0h

0

您可以重載您的onMeasure方法始終返回一個正方形。

創建延伸到按鈕類,幷包括該

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    int size = Math.min(getMeasuredWidth(), getMeasuredHeight()); 
    setMeasuredDimension(size, size); 
} 

不知道如何,如果你給出確切的尺寸,這將工作,但如果你設置寬度它應該工作,高度符合父

+0

我真的不明白這是如何工作的。抱歉! – J0hj0h

+0

onMeasure方法由視圖的父級調用,並通知視圖根據規格(widthMeasureSpec,heightMeasureSpec)測量其尺寸。在這個例子中,不是通過super.onMeasure「返回」實際計算的尺寸(你實際上不返回任何東西,而是使用setMeasuredDimension方法設置測量尺寸),所以你返回一個正方形。我沒有測試過,它是否工作? – taytay

+0

我沒有測試過它。我不喜歡這種方法,因爲它有點像黑客入侵圖書館。 :D我想有一種更安全和更專注的方式來改變或設置視圖的大小。但是,謝謝你的迴應和解釋! – J0hj0h