gpt4 book ai didi

android 通过 gridview 填充所有屏幕

转载 作者:行者123 更新时间:2023-11-30 03:08:56 24 4
gpt4 key购买 nike

我有一个 gridview 并制作了一个自定义适配器来填充它,用户可以通过我的网格的微调器行和列进行设置。在网格的每个单元格中,我都设置了一个视频 View 。

所以我需要在我的自定义适配器中动态设置每个视频 View 的大小,以填充屏幕的剩余部分。正在关注this我可以完成任务,我采用显示大小并设置 View 的布局除以行数和列数。

问题是主要布局有 action-bar 和 textview 。因此,窗口大小不正确。我需要减去操作栏和 TextView 的大小。我找到了一个已知操作栏大小的解决方案,但是当获取我的 TextView 的高度时,它始终为 0。

按照建议here我应该在渲染后获取 textview 大小,但是为了渲染我的 gridview 我需要知道这个大小!!

还有其他方法吗?需要手动计算 View 大小??

这是我的布局

    <?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;
}

最佳答案

您的问题是您在开始时检索了设备整个屏幕的大小。所以 ActionBar 必须减去,但如果您的布局没有占用所有剩余空间,则任何其他 View 。因此,您的方法与 android 模块化相矛盾,例如,如果您的 View 根据设备的大小以不同的方式使用。

我认为您需要的是使用 ViewTreeObserver,如下所示:

final View myView = ... // The RelativeLayout that's declared as root of your layout file
myView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
// You can here use View.getMeasuredWidth() or View.getMeasuredHeight() which correspond to the available space for the view containing your GridView and your TextView and then set your TextView's size
}
}

编辑:要使 gridview 填充所有剩余空间,您可以使用 LinearLayout,使用其权重属性:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1"
tools:context="it.nexera.visiamobile.ViewLiveMultiActivity"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<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="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

<GridView
android:id="@+id/gridview"
android:layout_width="0dp"
android:layout_height="0dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:layout_weight="1"
/>
</LinearLayout>

关于android 通过 gridview 填充所有屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com