Android - 中心整个TextView,包括背景

时间:2014-01-03 20:08:09

标签: android android-layout textview android-background

我正在以编程方式添加textview并希望在其上添加背景,但我似乎无法将背景置于中心位置。 (更新)

  FrameLayout mTableView1 = new FrameLayout(this);
  FrameLayout mTableView2 = new FrameLayout(this);
  FrameLayout mTableView3 = new FrameLayout(this);
  int bgTop = getResources().getIdentifier("tableb1" , "drawable", this.getPackageName());
  int bgMid = getResources().getIdentifier("tableb2" , "drawable", this.getPackageName());
  int bgBot = getResources().getIdentifier("tableb3" , "drawable", this.getPackageName());
  setTextStyle(tv1, "Dashboard", Gravity.CENTER, mLayoutView, 40, getResources().getColor(R.color.white), getResources().getColor(R.color.transparent), 0, 5);
  setTextStyle(tv2, "Happening Now:", Gravity.LEFT, mLayoutView, 15, getResources().getColor(R.color.white), getResources().getColor(R.color.transparent), 0, 5);
  setTableStyle(tv3, "Mark Novak Scheduled", Gravity.CENTER, mTableView1, 20, getResources().getColor(R.color.black), getResources().getColor(R.color.transparent), 0, 0, bgTop);
  setTableStyle(tv4, "Attendance up 3%", Gravity.CENTER, mTableView2, 20, getResources().getColor(R.color.black), getResources().getColor(R.color.transparent), 0, 0, bgMid);
  setTableStyle(tv5, "Location of next event", Gravity.CENTER, mTableView3, 20, getResources().getColor(R.color.black), getResources().getColor(R.color.transparent), 0, 0, bgBot);

 mLayoutView.addView(mTableView1);
 mLayoutView.addView(mTableView2);
 mLayoutView.addView(mTableView3);
}

   private void setTextStyle(TextView tv, String s, int g, LinearLayout L, int fsize, int textColor, int backgroundColor, int lpad, int tpad){
   tv.setText(s);
   tv.setGravity(g);
   tv.setTextColor(textColor);
   tv.setTextSize(fsize);
   tv.setPadding(lpad, tpad, lpad, 0);
   L.addView(tv);
 }

    private void setTableStyle(TextView tv, String s, int g, FrameLayout L, int fsize, int textColor, int backgroundColor, int lpad, int tpad, int bg){
   tv.setText(s);
   tv.setGravity(g);
   tv.setTextColor(textColor);
   tv.setTextSize(fsize);
   tv.setPadding(lpad, 0, 0, 0);
   tv.setBackgroundResource(bg);
   tv.setWidth(200);

   L.addView(tv);

}

我得到的是文本偏离中心200像素,但整个文本视图不是。背景图像从一端延伸到另一端。有没有解决的办法?我试过设置宽度。我让它工作了一点,但后来出了问题,它再次延伸。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

如果您想疏远TextView本身。您需要设置layout_gravity而不是gravity。 在java中,您可以通过设置布局参数来实现。

例如:

 private void setTextStyle(TextView tv, String s, int g, LinearLayout L, int fsize, int textColor, int backgroundColor, int lpad, int tpad){

   tv.setText(s);
   tv.setLayoutParams(new FrameLayout.LayoutParams(300, 25, Gravity.CENTER_HORIZONTAL));
   tv.setGravity(g);
   tv.setTextColor(textColor);
   tv.setTextSize(fsize);
   tv.setPadding(lpad, tpad, lpad, 0);
   L.addView(tv);
 }

答案 1 :(得分:0)

不要使用线性布局来居中。使用FrameLayout或RelativeLayout。

答案 2 :(得分:0)

不幸的是,Android背景总是会缩放以匹配其View的界限。如果您想要更高级的ScaleType,则必须使用ImageView

 private void setTableStyle(TextView tv, String s, int g, FrameLayout L, int fsize, int textColor, int backgroundColor, int lpad, int tpad, int bg){
     tv.setText(s);
     tv.setGravity(g);
     tv.setTextColor(textColor);
     tv.setTextSize(fsize);
     tv.setPadding(lpad, 0, 0, 0);
     tv.setWidth(200); 

     ImageView bgView = new ImageView(tv.getContext);
     bgView.setScaleType(ScaleType.CENTER);
     bgView.setImageResource(bg);
     FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
     flp.gravity = Gravity.CENTER;
     L.addView(bgView, flp);
     L.addView(tv);
}