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);
}