我有一個自定義類(觸摸按鈕),用於擴展TextView類。我無法手動調整按鈕的大小。我可以讓按鈕僅適用於一種類型的佈局或容器,但不能同時適用。在大多數情況下,Touchbutton是在GridView的,所以我的方法來改變大小是這樣:更改佈局和容器的自定義按鈕大小
private void setLayout(buttonsize_t size) {
log("Setting Layout: "+buttonsize_t.getPxl(size));
final float scale = getContext().getResources().getDisplayMetrics().density;
int dim = (int) (buttonsize_t.getPxl(size) * scale + 0.5f);
AbsListView.LayoutParams params = (AbsListView.LayoutParams) getLayoutParams();
if (params != null) {
params.height = dim;
params.width = dim;
}
else {
params = new AbsListView.LayoutParams(dim,dim);
}
setLayoutParams(params);
}
然而,當TouchButton在LinearLayout中被調整(例如)我得到一個崩潰與logcat的:
09-01 19:18:35.630: ERROR/AndroidRuntime(20793): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
09-01 19:18:35.630: ERROR/AndroidRuntime(20793): at com.ians.aac3.TouchButton.setLayout(TouchButton.java:204)
204行是指params的實例化。
我注意到GridView
和LinearLayout
共享父母ViewGroup
,所以我嘗試使用ViewGroup.LayoutParams
。然而,這會導致Gridviews的相同行爲(logcat引用相同的行)。
有誰知道我可以如何使這項工作的任何類型的佈局或部件?
UPDATE: 作爲建議我嘗試再次與視圖組:
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Log;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;
.....
ViewGroup.LayoutParams params = getLayoutParams();
if (params != null) {
params.height = dim;
params.width = dim;
}
else {
params = new LayoutParams(dim,dim);
}
setLayoutParams(params);
或沒有試圖回收當前的LayoutParams:
setLayoutParams(new ViewGroup.LayoutParams(dim, dim));
,我也得到相同類型的錯誤:
09-02 09:10:49.680: ERROR/AndroidRuntime(7069): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
09-02 09:10:49.680: ERROR/AndroidRuntime(7069): at android.widget.GridView.onMeasure(GridView.java:1028)
09-02 09:10:49.680: ERROR/AndroidRuntime(7069): at android.view.View.measure(View.java:10828)
09-02 09:10:49.680: ERROR/AndroidRuntime(7069): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4351)
09-02 09:10:49.680: ERROR/AndroidRuntime(7069): at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
09-02 09:10:49.680: ERROR/AndroidRuntime(7069): at android.view.View.measure(View.java:10828)
09-02 09:10:49.680: ERROR/AndroidRuntime(7069): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4351)
09-02 09:10:49.680: ERROR/AndroidRuntime(7069): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284)
更新2: 看來,使用上面指定的ViewGroup.LayoutParams適用於LinearLayout。然而,如上所見,gridview並不喜歡它...
出色地工作。感謝你的決議和一個很好的解釋。 – Ian
感謝您的解釋(= – moskis