1

Я добавляю текстовое изображение программно и хочу помещать фон на него, но я не могу заставить фон центрироваться. (Обновлено)Android - центр всего текста 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 пикселей, но в целом TextView нет. Фоновое изображение простирается от одного конца до другого. Есть ли способ обойти это? Я попытался установить ширину. У меня было немного работать, но потом что-то пошло не так, и оно снова растянулось.

Любые предложения?

+0

Вы также можете отправить код для функции setTextStyle? –

+0

@vipulmittal Сделано. Это было то же самое, что и другая функция, только с дополнительной переменной для установки фона. На самом деле, я должен просто сделать это одной функцией и передать ей нуль, я просто не обошел ее. –

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

Когда я это делаю, мне нужно применить его к другой функции, setTableStyle (так как это тот, который нуждается в центрировании). Я также меняю его на FrameLayout вместо LinearLayout. Это приведет к сбою приложения. –

+0

Если это кадр, вам нужно использовать FrameLayout.LayoutParams, а также вы можете публиковать LOGCAT –

+0

Да, я изменил его на FrameLayout.LayoutParams. Он рушится на lp.gravity = g, для записи. Вы хотите, чтобы я добавил LOGCAT в OP? –

0

Не используйте линейную компоновку для размещения в ней предметов. используйте FrameLayout или RelativeLayout.

+0

Хорошо, что оба работали и сломали все это. Текстовое изображение сосредоточено правильно, но теперь все начинается сверху с помощью FrameLayout. Нужно ли теперь устанавливать позицию y для каждого элемента? Похоже, это может быть неприятно, когда приходит время тестировать на нескольких устройствах. –

+0

Думаю, я попытаюсь сохранить LinearLayout и добавить к нему FrameLayout. Я дам вам знать, если это сработает. –

+0

Я обновил свой код и разместил текстовые фрагменты внутри рамки, затем поместил каждый из них в линейный макет. Без изменений. –

0

К сожалению, Android фонов всегда масштабироваться в соответствии с их границами View «s. Если вы хотите более продвинутый 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); 
} 
Смежные вопросы