我正在构建一个app抽屉片段,并使用GridView显示每个应用项目。目前,抽屉不是我希望的垂直滚动。我更喜欢使用ImageButtons作为唯一可聚焦的项目,以保持与我的其他屏幕一致。基本上,所有导航都是通过在ImageButtons之间移动来完成的(而不是与每个项目相关联的GridView区域)。这个应用程序是电视的启动器,因此GridView应该使用远程输入滚动。这些按钮现在可以导航,但只能实际显示。
我一直试图让滚动功能起作用。我假设它与强制关注ImageButtons有关,但我不确定如何解决这个问题。任何帮助表示赞赏!
fragment_app_drawer.xml
<FrameLayout 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"
tools:context="ninjabox.tv.com.ninjabox.AppDrawerFragment"
android:background="@color/dark_gray">
<GridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/appsGridLayout"
android:numColumns="5"
android:verticalSpacing="10dp"
android:columnWidth="50dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:focusable="false"
android:descendantFocusability="afterDescendants"
android:scrollIndicators="right">
</GridView>
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fragmentProgressBar"
android:layout_gravity="center"
android:visibility="invisible"/>
</FrameLayout>
app_drawer_item.xml
<?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="match_parent"
android:layout_height="match_parent"
android:padding="25dp"
android:clipToPadding="false"
android:focusable="false">
<ImageButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/appIcon"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:cropToPadding="false"
android:stateListAnimator="@anim/button_elevation"
android:background="@drawable/image_button_drawable"
android:elevation="@dimen/elevation_default"
android:src="@drawable/spotify_icon"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:padding="8dp"
android:focusable="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/appLabel"
android:textSize="@dimen/abc_text_size_medium_material"
android:textColor="#ffffff"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:text="App Name"
android:layout_below="@+id/appIcon"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
AppDrawerFragment.java ArrayAdapter
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayAdapter<AppDetail> adapter = new ArrayAdapter<AppDetail>(
getActivity(),
R.layout.app_drawer_item,
MainActivity.getApps()) {
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = getLayoutInflater(null).inflate(R.layout.app_drawer_item, null);
}
ImageButton appIconButton = (ImageButton)convertView.findViewById(R.id.appIcon);
appIconButton.setImageDrawable(mApps.get(position).getIcon());
if (position == 0) {
appIconButton.requestFocus();
}
appIconButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), mApps.get(position).getName(), Toast.LENGTH_LONG).show();
}
});
TextView appLabel = (TextView)convertView.findViewById(R.id.appLabel);
appLabel.setText(mApps.get(position).getLabel());
return convertView;
}
};
mGridView.setAdapter(adapter);
}
答案 0 :(得分:0)
您只需要使用scrollView环绕要滚动的内容。例如,如果要在第一个布局中描绘GridView,请添加:
<ScrollView
android:id="@+id/scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<GridView
<!-- everything you already have -->
</GridView>
</ScrollView>
我没有测试过,但我会工作。