Java 在tablelayout中对齐imageview 这应该很容易,我怎么能把星星放在中间呢?我正在代码中动态添加顶部标题TextView和stars。我尝试在imageview上设置重力,但没有效果

Java 在tablelayout中对齐imageview 这应该很容易,我怎么能把星星放在中间呢?我正在代码中动态添加顶部标题TextView和stars。我尝试在imageview上设置重力,但没有效果,java,android,alignment,android-imageview,tablelayout,Java,Android,Alignment,Android Imageview,Tablelayout,更新:我添加了iv.setScaleType(ImageView.ScaleType.FIT\u START)现在星星向左对齐 @覆盖 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.acheivements); tbLayout=(TableLayout)this.findviewbyd(R.id.TableAch); rowHeade

更新:我添加了
iv.setScaleType(ImageView.ScaleType.FIT\u START)
现在星星向左对齐



@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.acheivements);
tbLayout=(TableLayout)this.findviewbyd(R.id.TableAch);
rowHeader=(TableRow)this.findViewById(R.id.RowAchHeader);
FlurryAgent.logEvent(“成就”);
TableRow.LayoutParams tableRowParams=
新建TableRow.LayoutParams
(TableRow.LayoutParams.FILL_父级,TableRow.LayoutParams.WRAP_内容);
tableRowParams.setMargins(0,0,0,5);
TableRow.LayoutParams params=新建TableRow.LayoutParams(0,TableRow.LayoutParams.WRAP_内容);
参数重量=1;
参数重力=重心;
int fontSize=12;
TextView tv=新的TextView(此);
tv.setLayoutParams(参数);
tv.setText(“”);
tv.setTextSize(fontSize);
rowHeader.addView(tv);//这是左上角的空白
对于(Level:Level.values()){//,我们添加游戏的所有标题
tv=新文本视图(此);
tv.setText(“容易”);
tv.setTextSize(fontSize);
tv.setLayoutParams(参数);
rowHeader.addView(电视);
}
//接下来,我们为每个游戏添加关卡,在经过的地方放置一个关卡图像
用于(游戏:Games.values()){
TableRow newRow=新的TableRow(本);
newRow.setLayoutParams(tableRowParams);
String[]words=game.name().split((?=[A-Z]);
字符串名称=”;
for(字符串字:字){
如果(word.length()<1)继续;
名称+=单词+“\n”;
}
tv=新文本视图(此);
tv.setTextSize(fontSize);
tv.setText(名称);
tv.setLayoutParams(参数);
newRow.addView(电视);
newRow.setWeightSum(6);
对于(级别:Level.values()){
ImageView iv=新的ImageView(本);
iv.setScaleType(ImageView.ScaleType.FIT_START);
iv.设置布局参数(参数);
tv=新文本视图(此);
tv.setLayoutParams(参数);
tv.setText(“容易”);
tv.setTextSize(fontSize);
如果(acheivements.getPassed(level,game))//有成就
{
iv.setImageResource(R.drawable.star\u gold\u full\u small);
}
否则{
iv.setImageResource(R.drawable.star\u gold\u empty\u small);
}
newRow.addView(电视);
}
tbLayout.addView(newRow);
}
设置广告(真实);
}
您应该这样做:

TableRow.LayoutParams params = new TableRow.LayoutParams(0,WRAP_CONTENT);
您应该为TextView设置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);
            }
for(游戏:Games.values()){
TableRow newRow=新的TableRow(本);
newRow.setLayoutParams(tableRowParams);
TableRow.LayoutParams params2=新建TableRow.LayoutParams(0,TableRow.LayoutParams.WRAP_内容);
参数2.weight=.8f;
参数2.重力=重心;
String[]words=game.name().split((?=[A-Z]);
字符串名称=”;
for(字符串字:字){
如果(word.length()<1)继续;
名称+=单词+“\n”;
}
tv=新文本视图(此);
tv.setTextSize(fontSize);
tv.setText(名称);
tv.setLayoutParams(参数2);
newRow.addView(电视);
newRow.setWeightSum(6);
对于(级别:Level.values()){
ImageView iv=新的ImageView(本);
iv.setScaleType(ImageView.ScaleType.CENTER_内);
iv.setAdjustViewBounds(真);
iv.设置布局参数(参数);
tv=新文本视图(此);
tv.setLayoutParams(参数);
tv.setText(“容易”);
tv.setTextSize(fontSize);
如果(acheivements.getPassed(level,game))//有成就
{
iv.setImageResource(R.drawable.star\u gold\u full\u small);
}
否则{
iv.setImageResource(R.drawable.star\u gold\u empty\u small);
}
newRow.addView(电视);
}
tbLayout.addView(newRow);
}
在这段代码中,我创建了新的布局参数作为params2,因为textview使用了权重1,所以您的图像几乎是右侧的。我使用了.8f的重量作为名称,所以现在它可以工作了。所以按照你的要求去做。
希望能有帮助

为TableRow分配权重和,并为imageview和TextView分配权重,以便在屏幕上完美设置。我不这么认为。权重是根据父视图将占用的空间量定义的。我想查看您的更新代码。您可以发布当前更新视图的图像吗?我想问题是您已经给出了权重总和6。你有我们
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);
            }