2013-05-14 147 views
0

我想將進度圈的寬度和高度設置爲其旁邊項目的高度,即一個按鈕。最後,我想要一個具有相同高度和寬度的圓圈,佔據搜索按鈕的總高度 - 如果有更簡單的方法可以做到這一點,請告訴我。使用Java獲取按鈕的計算寬度(返回-2?)

我想這不能使用簡單的XML來完成,所以我試圖用LayoutParams這一點,在我的活動OnCreate()功能:

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); 

這並不適用於寬度工作,但是它確實爲高度工作。我添加了敬酒以查看一些調試信息。 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" /> 

根據this-2意味着wrap_content。但我不想像XML那樣擁有高度,我可以自己看到。我想要由設備計算的高度

我該如何得到這個工作?

回答

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,可以明確控制其部件的大小。

0

這是因爲Android明白你想要定義大小的「常數」。

檢查這個answer,我希望它可以幫助你:)