Android GridView使用ImageButtons滚动

时间:2016-06-17 01:52:14

标签: android gridview scroll scrollview imagebutton

我正在构建一个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);
}

1 个答案:

答案 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>

我没有测试过,但我会工作。