【问题标题】:Alignment of imageview in tablelayout表格布局中图像视图的对齐方式
【发布时间】:2013-08-23 13:20:55
【问题描述】:

这应该很容易,我怎样才能将星星对齐在中间。我正在代码中动态添加顶部标题文本视图和星号。我尝试在图像视图上设置重力不起作用。

更新:我添加了 iv.setScaleType(ImageView.ScaleType.FIT_START) 现在星号向左对齐

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
        android:layout_height="fill_parent" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads">
   <TableLayout  
    android:id="@+id/TableAch"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:background="@color/white"
    android:layout_alignParentTop="true"
    android:shrinkColumns="*"
    android:stretchColumns="*"
    >

        <TableRow  
        android:id="@+id/RowAchTitle"  
        android:layout_height="wrap_content"  
        android:layout_width="match_parent"  
        android:gravity="center_horizontal"
        >  

            <TextView  
                android:id="@+id/ViewAchTitle"  
                android:layout_width="match_parent"  
                android:layout_height="wrap_content"  
                android:textStyle="bold"  
                android:text="Achievements"  
                android:gravity="center"  
                android:layout_span="6">
            </TextView>  

        </TableRow>  
       <TableRow  
        android:id="@+id/RowAchHeader"  
        android:layout_height="wrap_content"  
        android:layout_width="match_parent"
        android:weightSum="6"
        >   
        </TableRow>

    </TableLayout>



    </RelativeLayout>

@Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.acheivements);

            tbLayout = (TableLayout) this.findViewById(R.id.TableAch);
            rowHeader = (TableRow) this.findViewById(R.id.RowAchHeader);

            FlurryAgent.logEvent("Achievements"); 

            TableRow.LayoutParams tableRowParams=
                      new TableRow.LayoutParams
                      (TableRow.LayoutParams.FILL_PARENT,TableRow.LayoutParams.WRAP_CONTENT);

            tableRowParams.setMargins(0, 0, 0, 5);


            TableRow.LayoutParams params = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT);

            params.weight = 1;
            params.gravity= Gravity.CENTER;

            int fontSize = 12;

            TextView tv = new TextView(this);
            tv.setLayoutParams(params);
            tv.setText("     ");
            tv.setTextSize(fontSize);
            rowHeader.addView(tv); //This is blank top left corner

            for (Level level : Level.values()) { //Then we add all the headers for games
                tv = new TextView(this);

                tv.setText("EASY");
                tv.setTextSize(fontSize);
                tv.setLayoutParams(params);
                rowHeader.addView(tv);
            }

            //Next we add the levels for each game, putting a pass image where passed



            for (Games  game : Games.values()) {
                TableRow newRow = new TableRow(this);
                newRow.setLayoutParams(tableRowParams);

                String[] words = game.name().split("(?=[A-Z])");
                String name = "";
                for (String word : words) {
                    if(word.length() < 1) continue;
                    name += word + "\n";
                }

                tv = new TextView(this);
                tv.setTextSize(fontSize);
                tv.setText(name);
                tv.setLayoutParams(params);
                newRow.addView(tv);
                newRow.setWeightSum(6);

                for (Level level : Level.values()) {
                    ImageView iv = new ImageView(this);

                        iv.setScaleType(ImageView.ScaleType.FIT_START);
                    iv.setLayoutParams(params);

                    tv = new TextView(this);
                    tv.setLayoutParams(params);
                    tv.setText("EASY");
                    tv.setTextSize(fontSize);

                    if( acheivements.getPassed(level, game) )//has achievement
                    {
                        iv.setImageResource(R.drawable.star_gold_full_small);
                    }
                    else {
                        iv.setImageResource(R.drawable.star_gold_empty_small);
                    }
                    newRow.addView(tv);
                }
                tbLayout.addView(newRow);
            }

            setupAds(true);
     }

【问题讨论】:

  • 将 weightsum 分配给 TableRow 并赋予 imageview 和 textviews 权重以在屏幕上完美设置。
  • 我不这么认为。重量定义为它将占据其父级的空间量。
  • 我想看看你更新的代码。
  • 你能发布当前更新视图的图片吗??
  • 我认为问题在于你给了 weightsum 6。而你只使用了 4 个权重。当你使用权重时,你应该使用所有的权重。意味着分配给 textviews 的总权重需要为 6。请这样做并检查对齐方式。

标签: java android alignment android-imageview tablelayout


【解决方案1】:

你应该这样做:

TableRow.LayoutParams params = new TableRow.LayoutParams(0,WRAP_CONTENT);

你应该有 textviews 的 tablerow 布局参数。

那么在这个参数中你应该增加权重。

params.weight = 1;
params.gravity = GRAVITY.CENTER;

并且您的表格行应该具有其内容的重力“中心”(而不是布局重力)。

试试这个:

for (Games  game : Games.values()) {
                TableRow newRow = new TableRow(this);
                newRow.setLayoutParams(tableRowParams);

TableRow.LayoutParams params2 = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT);

                params2.weight = .8f;
                params2.gravity= Gravity.CENTER;

                String[] words = game.name().split("(?=[A-Z])");
                String name = "";
                for (String word : words) {
                    if(word.length() < 1) continue;
                    name += word + "\n";
                }

                tv = new TextView(this);
                tv.setTextSize(fontSize);
                tv.setText(name);
                tv.setLayoutParams(params2);
                newRow.addView(tv);
                newRow.setWeightSum(6);

                for (Level level : Level.values()) {
                    ImageView iv = new ImageView(this);

                    iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                    iv.setAdjustViewBounds(true);
                    iv.setLayoutParams(params);

                    tv = new TextView(this);
                    tv.setLayoutParams(params);
                    tv.setText("EASY");
                    tv.setTextSize(fontSize);

                    if( acheivements.getPassed(level, game) )//has achievement
                    {
                        iv.setImageResource(R.drawable.star_gold_full_small);
                    }
                    else {
                        iv.setImageResource(R.drawable.star_gold_empty_small);
                    }
                    newRow.addView(tv);
                }
                tbLayout.addView(newRow);
            }

在这段代码中,我创建了新的布局参数作为 params2,因为 textview 使用的权重为 1,因此您的图像很少位于右侧。我曾使用 .8f 重量作为名称,所以现在它工作正常。所以按照你的要求做。 希望有帮助!!

【讨论】:

  • 请张贴您的图片,以便我识别问题。
  • 我再次更新了两张图片,一张有文字,一张有星星(imageviews)。您可以看到文本对齐而图像没有对齐。它在我添加的新行上缺少 weightsum,还在我删除的游戏名称顶部添加了一个空白行。
  • 将重心设置为图像视图的表格中心,并使用文本视图中使用的权重,以便两者获得相同的空间分配并且可以对齐。如果您可以提供代码,那么我可以帮助您。
  • 您已将重力左用于标题,这就是它未对齐的原因。将它们设置为中心。
  • 是的,我尝试将它们设置为居中但没有任何区别,文本对齐星星不对齐,它必须与图像对齐有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
相关资源
最近更新 更多