我有一個gridview併爲其填充自定義適配器,用戶可以通過我的網格的微調器行和列進行設置。在網格的每個單元格中,我設置了一個視頻視圖。android通過gridview填充所有屏幕
因此,我需要在我的自定義適配器中爲每個視頻視圖設置dinamically以填充屏幕的其餘部分。按照this我可以完成任務,我將顯示大小和佈局設置爲我的視圖除以行數和列數。
問題是主要佈局有動作欄和textview。所以窗戶大小不正確。我需要減去動作欄和textview的大小。 我找到訣竅行動吧尺寸的解決方案,但是當拿到我的TextView的高度總是0
至於建議here渲染後,我應該採取TextView的大小,但渲染我的GridView我需要知道這個尺寸!
還有其他方法可以做到嗎?有必要手動計算視圖大小?
這是我的佈局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="it.nexera.visiamobile.ViewLiveMultiActivity"
>
<TextView
android:id="@+id/txt_grid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="#454545"
android:gravity="left"
android:text="@string/sel_grid" />
<Spinner
android:id="@+id/grid_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/gridview"
android:layout_toRightOf="@+id/txt_grid" />
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchMode="columnWidth"
android:layout_below="@+id/txt_grid"
android:gravity="center"
/>
</RelativeLayout>
,這是我的自定義適配器getView方法:
// create a new VideoView for each item referenced by the Adapter
@SuppressLint("NewApi")
public View getView(int position, View convertView, ViewGroup parent) {
VideoView videoView;
if (convertView == null) { // if it's not recycled, initialize some attributes
videoView = new VideoView(mContext);
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
int width=0;
int height=0;
if (android.os.Build.VERSION.SDK_INT >= 13){
Point size = new Point();
display.getSize(size);
width = size.x;
height = size.y;
}
else{
width = display.getWidth();
height = display.getHeight();
}
// Calculate ActionBar height
TypedValue tv = new TypedValue();
int actionBarHeight=0;
if (mContext.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
{
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,mContext.getResources().getDisplayMetrics());
}
TextView textview = (TextView) ((Activity) mContext).findViewById (it.nexera.visiamobile.R.id.txt_grid);
int textview_height=textview.getHeight();
height=height-actionBarHeight-textview_height;
AbsListView.LayoutParams param = new AbsListView.LayoutParams(
(width/COL_NUMBER),
(height/ROW_NUMBER));
videoView.setLayoutParams(param);
Uri video = Uri.parse(mvideoSrc[position]);
videoView.setVideoURI(video);
videoView.start();
} else {
videoView = (VideoView) convertView;
}
return videoView;
}
'fill_parent'is已棄用,請改爲使用'match_parent'。 –
好的謝謝,但這不能解決我的問題 – tulkas85