如何让customAdapter填充gridview高度

2024-01-18

我正在开发数独应用程序。布局为 9x9 GridView。每个 GridView 包括 9 个由 customAdapter 提供的 Textview。我想让 9 个 TextView 填充每个 GridView 的高度。如何?

This is what I am having now enter image description here

这是我的GridAdapter:

public class myGridAdapter extends BaseAdapter {

private Context context;
private String[] mobileValues;

public myGridAdapter(MainActivity mainActivity, String[] arrayEmpty) {
    this.context = mainActivity;
    this.mobileValues = arrayEmpty;
}

public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView;

    if (convertView == null) {

        gridView = new View(context);

        // get layout from text_item.xml
        gridView = inflater.inflate(R.layout.text_item, null);

        // set value into textview
        TextView textView = (TextView) gridView
                .findViewById(R.id.grid_item_label);
        textView.setText(mobileValues[position]);

    } else {
        gridView = (View) convertView;
    }

    return gridView;
}
.....
}

这是每个文本项的 XML

<?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="fill_parent"
android:gravity="center"
android:orientation="vertical" >

<TextView
    android:id="@+id/grid_item_label"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/cell_shape"
    android:text="@string/_1"
    tools:ignore="InefficientWeight"
    android:textSize="12sp" >
</TextView>

</LinearLayout>

这是每个 TextView 的形状

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<solid android:color="#FFFFFF"/>
<stroke android:width="1dp" android:color="#777777" />
</shape>

I want my Gridview to be like this one enter image description here

应用 bakriOnFire 的第一个答案后


您可以将在 GridView 适配器中膨胀的 TextView 的每个 LinearLayout 的高度设置为 screenHeight/3。

在 getView 中膨胀 textView 的 xml 后,将膨胀的视图转换为 LinearLayout 并将其高度设置为:

LayoutInflater li = getLayoutInflater();
LinearLayout ll = (LinearLayout) li.inflate(R.layout.menu_items, null);

int screenHeight = ((Activity) context).getWindowManager()
                    .getDefaultDisplay().getHeight();

ll.setMinimumHeight(screenHeight/3);

Edit

活动_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent"
    android:layout_height="match_parent">

文本项.xml

<?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="wrap_content"
android:gravity="center"
android:orientation="vertical" >

<TextView
    android:id="@+id/grid_item_label"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    tools:ignore="InefficientWeight"
    android:padding="0dp"
    android:textSize="12sp" >
</TextView>

</LinearLayout>

MainActivity.java

public class MainActivity extends Activity {

    String[] str = { "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
             "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
             "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
             "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
             "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
             "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
             "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
             "1", "2", "3", "1", "2", "3", "1", "2", "3" ,
             "1", "2", "3", "1", "2", "3", "1", "2", "3" };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        GridView gridView = (GridView) findViewById(R.id.gridView1);

        gridView.setAdapter(new myGridAdapter(this, str));

        gridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {

            }

        });

    }

    public class myGridAdapter extends BaseAdapter {

        private Context context;
        private String[] mobileValues;

        public myGridAdapter(MainActivity mainActivity, String[] arrayEmpty) {
            this.context = mainActivity;
            this.mobileValues = arrayEmpty;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            LinearLayout gridView;

            if (convertView == null) {

                // get layout from text_item.xml
                gridView = (LinearLayout)inflater.inflate(R.layout.text_item, null);

                int screenHeight = ((Activity) context).getWindowManager()
                        .getDefaultDisplay().getHeight();

                gridView.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.MATCH_PARENT, screenHeight/9));


                //gridView.setMinimumHeight(screenHeight/9);
                // set value into textview
                TextView textView = (TextView) gridView
                        .findViewById(R.id.grid_item_label);
                textView.setText(mobileValues[position]); 

            } else {
                gridView = (LinearLayout) convertView;
            }

            return gridView;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mobileValues.length;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
    }

}

在 getView 中,我所做的是将 text_item.xml 膨胀 9x9 次,其中我动态地将 text_item 的布局高度设置为 screenHeight/9。 让我知道它是否适合您。

Edit 2

活动_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
            android:layout_width="match_parent"
        android:layout_height="match_parent">
<GridView
        android:id="@+id/gridView1"
        android:layout_width="match_parent" 
        android:layout_height="match_parent"
        android:gravity="center"
        android:numColumns="9"
        android:padding="0dp"
        android:background="#000000"
        android:horizontalSpacing="3dp"
        android:verticalSpacing="3dp"
        android:stretchMode="columnWidth" >
    </GridView>
    </LinearLayout>

文本项.xml

<?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="wrap_content"
android:gravity="center"
android:background="#FFFFFF"
android:orientation="vertical" >

<TextView
    android:id="@+id/grid_item_label"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    tools:ignore="InefficientWeight"

    android:padding="0dp"
    android:textSize="12sp" >
</TextView>

</LinearLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让customAdapter填充gridview高度 的相关文章

随机推荐

  • 类的成员字段顺序是否“稳定”?

    考虑到 c 或 c 11 我有一些数据数组 其中包含 2 N 整数 代表 N 对 对于每个偶数 i 0 2 4 6 2 N 它认为 data i data i 1 形成这样一个对 现在我想要一种简单的方法来访问这些对 而不需要编写如下循环
  • 在 ASP.NET 中将文本下载为文件

    我正在尝试将屏幕上的一些文本输出下载为文本文件 以下是代码 它在某些页面上起作用 而在其他页面上根本不起作用 谁能建议这里出了什么问题吗 protected void Button18 Click object sender EventAr
  • UI 测试中通用角色名称不完整

    我正在使用 Xcode 7 的新功能 UI 测试 记录交互后 Xcode自动生成代码 void testDoubleTapToolBarItem XCUIApplication alloc init tabBars buttons U517
  • bash/expect 脚本中的错误处理

    下面粘贴的是一个 bash 脚本 结合了 Expect 代码 其中 通过 ssh 连接到远程主机 收集文件并准备 tgz 文件 将 tgz 文件从远程主机复制到本地计算机 再次通过 ssh 连接到远程主机并删除之前创建的 tgz 文件 最后
  • 我必须在 javascript 函数中返回一些东西吗?

    在 JavaScript 函数中 我需要返回某些内容 true 或 false 吗 到目前为止 我编写的所有没有返回任何内容的函数都工作得很好 我只是好奇 不 Javascript 函数不需要返回值 如果你调用的函数不return一个值 你
  • 使用 css 或 javascript 将视频放置为 100% 高度和 100% 宽度

    我想放置一个 100 宽度和 100 高度的 html5 视频 当然带有 video 标签 该视频将在后台播放 这是一个带有图像的示例 我想要与视频完全相同的示例 我只是不知道如何做到这一点 image background image u
  • 对 Web 服务调用中的会话进行只读访问?

    我们有一个 net asmx Web 服务 它从 javascript 调用 使用 ASP Net AJAX 并且需要访问会话 WebMethod true public string DoSomethingOnTheServer 我们遇到
  • google_drive 和 google-api-client 中的法拉第冲突

    我希望能够使用 google api client gem 进行服务到服务身份验证 并使用 google drive api 访问电子表格 不幸的是 这些宝石似乎由于依赖项中需要不同版本的法拉第而发生冲突 有人知道如何解决这个问题吗 如果首
  • 当 closeonselect 为 false 时关闭 select2

    当您点击离开时 是否有更好的方法来关闭 select2 我把它关闭了 document click function event if event target hasClass select2 selection rendered eve
  • 使用 sip.js 录制 SIP 通话中的麦克风和音频

    晚上好 堆栈溢出 我的一个项目确实需要帮助 我在该项目中使用 sip js 和 VoIP 来拨打电话号码 The Goal 我想允许用户录制音频和麦克风并将数据保存在服务器上 以 base64 编码或作为文件 因此 对话结束后我可以再次听到
  • kotlin.UninitializedPropertyAccessException:lateinit 属性首选项尚未初始化

    我在多个项目中使用了共享首选项的代码 它工作正常 但现在当我在另一个项目中应用相同的代码时 它停止工作 以下是错误 kotlin UninitializedPropertyAccessException lateinit 属性首选项尚未初始
  • LLVM - 如何将 AST 转换为 IR

    我知道一个AST解析器生成的数据用于在前端生成 IR 我想知道如何解析 AST 然后将其转换为 IR 问题汇编或位码 AST 是一棵树 从 AST 到 IR 的转换涉及哪些步骤 发射LLVM IR from Clang ASTs发生在 Cl
  • 绘制大规模的networkx图:数组太大

    我正在尝试绘制带有加权边的网络图 但现在我遇到了一些困难 正如标题所示 这张图确实很大 节点数量 103362 边数 1419671 当我尝试使用以下代码绘制该图时 pos nx spring layout G nx draw G node
  • 子图是重叠的轴标签[重复]

    这个问题在这里已经有答案了 我在 python 中创建了一个包含多个子图的图形 我还在图中的一些轴上添加了各种轴标签 举些例子 plt xlabel Phase circ fontsize 10 但我注意到 当生成最终图形时 其他子图可以重
  • 如何在所有ajax调用中向URL添加参数?

    我有一个使用 jQuery 的 Backbone 应用程序 并且想要附加一个sessionId所有 ajax 调用的 URL 参数 我怎样才能在 Backbone 或 jQuery 中做到这一点 也许以全局方式而不重写 Backbone S
  • 使用 Angular 2 生成 Docx 文件

    我正在使用 angular2 我想使用对象生成 docx 文件 我希望我的 docx 文件包含页脚 页眉 表格等 我能想到的最佳解决方案是首先创建一个 HTML 文件 然后将其转换为 docx 文件 但这似乎不对 有没有更简单 更方便的方法
  • 如何在 jasmine 规范中使用 $promise.then 模拟 AngularJS $resource

    I use resource设置一些API调用 在测试时我采用了注入的通用方法 q然后做 mockMyService doSomethingAsync andReturnValue q when successResponse 这已经很有效
  • xunit 以编程方式添加新测试/“[事实]”?

    我们有一个充满 JSON 文本文件的文件夹 需要将其设置为单个 URI 目前 这一切都是通过单个 xUnit Fact 完成的 如下所示 Fact public void TestAllCases PileOfTests pot new P
  • Xamarin.iOS 发布版本中的 Console.WriteLine 调用会发生什么情况?

    使用 XCode 开发 iOS 应用程序时 可以使用 NSLog 调用将信息写入控制台以进行调试 在 Xamarin iOS 中 可以使用 Console WriteLine 完成相同的操作 当运行应用程序的发布版本时 如果没有附加调试器
  • 如何让customAdapter填充gridview高度

    我正在开发数独应用程序 布局为 9x9 GridView 每个 GridView 包括 9 个由 customAdapter 提供的 Textview 我想让 9 个 TextView 填充每个 GridView 的高度 如何 This i