【问题标题】:Remove extra space around GridView programmatically以编程方式删除 GridView 周围的额外空间
【发布时间】:2012-08-22 00:07:30
【问题描述】:

我正在尝试在我的 java 类中以编程方式创建一个GridView,并且一切正常。问题是GridView 周围自动生成的 5 像素填充。在 xml 中,我设法使用以下方法将其删除:

android:listSelector="@null"

但我无法在 java 中做任何类似的事情。我尝试了一些解决方法,比如让GridView 比实际屏幕大 10 像素,但没有运气。

有人有这方面的代码吗?

编辑:

我的回答并没有解决问题。赏金还在继续。 这是我的GridView 代码:

    GridView gridView = new GridView(this);
    gridView.setNumColumns(someInt);
    gridView.setAdapter (new MyCustomAdapter(this));
    gridView.setLayoutParams(new GridView.LayoutParams(
            customValue,
            LayoutParams.FILL_PARENT,
            Gravity.CENTER_HORIZONTAL)
    );

【问题讨论】:

    标签: android gridview


    【解决方案1】:
    • 确保填充在不同密度的屏幕上显示相同的一种方法是将其转换为 DIP 单位。

      int padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -5, 
                                          getResources().getDisplayMetrics());
      
    • 您可以尝试的其他方法是在 xml 中定义一个 null drawable..

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <drawable name="null_drawable">@null</drawable>
          ...
      </resources>
      

      然后拨打setSelector(R.drawable.null_drawable);

    更新:

    • 在自己的 xml 中定义您的 GridView 并对其进行扩充。

      layout/mygrid.xml

      <?xml version="1.0" encoding="utf-8"?>
      <GridView 
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:listSelector="@null"/>
      

      在java中,

      GridView gridView = (GridView)inflater.inflate(R.layout.mygrid, null);
      gridView.setLayoutParams(new GridView.LayoutParams(customValue, 
                              LayoutParams.FILL_PARENT));
      gridView.setNumColumns(someInt);
      gridView.setAdapter (new MyCustomAdapter(this));
      

    【讨论】:

    • 在java代码的文件中得到错误,xml没有变化。
    • 你的意思是它崩溃了?还是语法错误? wt是错误吗?
    • 我曾考虑过这种独奏,但我想检查是否有任何方法可以以编程方式 100% 执行此操作,而不使用 xml,因为将多个 xml 导入一个类通常是不稳定的(我自己的经验)
    • 你在膨胀时遇到了什么问题?你是什​​么意思“将多个xml导入一个类”?
    • 我是说这个问题是关于以编程方式执行此操作的,如果失败,我会使用你的独奏。
    【解决方案2】:

    通过以下方式解决它:

        gridView.setPadding(-5, 0, -5, 0);
    

    但是对于不同的屏幕,您需要不同的填充。但这不是一个完整的解决方案。将接受此代码的功能修改。

    【讨论】:

      【解决方案3】:

      要获得与使用android:listSelector="@null" 相同的效果,但在代码中您需要使用setSelector(),如marvinX​​XII 所述。 但是您需要传入有效的 ResourceId 或使用 setSelector(Drawable sel) 变体。 不幸的是,不可能将null 传递给该方法,因为这将导致 NullPointerException。 here 描述的解决方法是使用这个:

      gridView.setSelector(android.R.color.transparent);
      

      【讨论】:

      • 更好,但它仍然是 GridView 侧面的像素。
      【解决方案4】:

      我认为您可以在创建动态网格视图时使用 setPadding 来解决该问题。

      int grids_height = (int) TypedValue.applyDimension(
                  TypedValue.COMPLEX_UNIT_DIP, (int) (Row_num * 80),
                  getResources().getDisplayMetrics());
          Log.v("", "" + grids_height);
          gridview = new GridView(this);
          gridview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                  grids_height));
          gridview.setPadding(0, 3, 0, 0);
          gridview.setBackgroundColor(Color.TRANSPARENT);
          gridview.setNumColumns(7);
          gridview.setVerticalSpacing(1);
          gridview.setHorizontalSpacing(1);
          gridview.setGravity(Gravity.CENTER_HORIZONTAL);
          gridview.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
      

      【讨论】:

      • 不好。我已经对 setPadding 进行了很多实验,我必须为不同的屏幕设置不同的填充以适应不同的屏幕。安卓设备有很多不同的屏幕尺寸。
      【解决方案5】:

      setSelector(int)(来自AbsListView)不是您要找的吗?

      点赞setSelector(0)

      【讨论】:

      • 不好。导致崩溃或文件错误。想让我把它改成 setSelected。
      • 不应该这样,你能用GridView初始化显示你的代码吗?
      • 如果它真的崩溃了,需要那个堆栈跟踪来理解它为什么崩溃
      • 它崩溃了,因为 0 不是有效的资源 id
      【解决方案6】:

      你见过Why are there extra pixels around my Android GridView?这个问题吗?在这种情况下,问题是在 gridview 上用作选择器的图像有一个填充。

      以编程方式应用该问题的建议解决方案,您将set the selector

      gridView.setSelector(android.R.color.transparent)
      

      【讨论】:

        【解决方案7】:

        使用以下设置对我有用:

        public ContactContainer(Context context, AttributeSet attrs) {
            super(context, attrs);
            gallery = new GridView(context, attrs);
            gallery.setNumColumns(numColumns);
            gallery.setStretchMode(stretchMode);
            gallery.setSmoothScrollbarEnabled(smoothScrollbar);
            gallery.setSelector(listSelector);
            gallery.setGravity(Gravity.CENTER_HORIZONTAL);
            this.addView(gallery);
        }
        

        我将它与这段 xml 代码结合使用:

        <de.ramicro.SClip.components.ContactContainer
            android:id="@+id/gridview_gallery_contacts"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@id/contact_gallery_bottom_bar"
            android:layout_below="@id/contact_gallery_top_bar"
            android:padding="0dip"/>
        

        我认为您需要的可能是透明选择器和重力设置为 CENTER_HORIZONTAL 的组合。

        【讨论】:

        • 你能上传你的stretchMode、smoothScrollbar和listSelector吗?
        • private int listSelector = android.R.color.transparent;私有 int numColumns = 2;私人布尔smoothScrollbar = true;私有 int stretchMode = GridView.STRETCH_COLUMN_WIDTH;
        猜你喜欢
        • 2013-08-21
        • 2018-02-18
        • 2014-08-25
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        相关资源
        最近更新 更多