GradientDrawable with OVAL shape not working inside programatically added Text View

别说谁变了你拦得住时间么 提交于 2020-01-07 09:43:05

问题


I have programmatically added Text View and Button.

Code

final TextView test = new TextView(getApplicationContext());
test.setText(String.valueOf(counterQuantity));
test.setTextColor(getResources().getColor(R.color.black));
test.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);

GradientDrawable border = new GradientDrawable();
border.setShape(GradientDrawable.OVAL);
border.setStroke(1, getResources().getColor(R.color.black));
border.setCornerRadius(2);
border.setColor(getResources().getColor(R.color.colorPrimaryDark)); //white background
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
  test.setBackgroundDrawable(border);
} else {
  test.setBackground(border);
}

Button articleButtonId = (Button) v;
int articleButton = articleButtonId.getId();
final String articleButtonText = articleButtonId.getText().toString();
Log.w("articleButton", "" + articleButton);

final Button button = new Button(getApplicationContext());
button.setText(test.getText() + "  " + "  " + articleButtonText);
button.setGravity(Gravity.CENTER);
button.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12);
button.setTextColor(getResources().getColor(R.color.black));
button.setBackgroundColor(getResources().getColor(R.color.article_button_group));
button.setBackground(getResources().getDrawable(R.drawable.order_button_group_bg));

Here in above code i have a Text View and Button added programatically.

The text of Text Views added inside Button setText method using concatination.

Now i want to make only Text View in Circle View.

I have tried with GradientDrawable but the effect on Text View is remains same no any effects taken by Text View.

In other scenarios GradientDrawable is working fine but in this scenario is not getting what i want.

Here is image what i want exactly.

Any help will be highly appreciated.


回答1:


below is a snippet for your problem and I've tested on kitkat and marshmallow devices, it is showing properly, So give it a try...

activity_main.xml

<LinearLayout
    android:id="@+id/lv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"/>

MainActivity.java

1- find id of linearlayout

2 - Then create dynamic view with TextView or Button etc...

private void createDynamicView() {
    TextView tvDigit = new TextView(this);
    tvDigit.setText("1");
    tvDigit.setTextColor(ContextCompat.getColor(this, R.color.white));
    tvDigit.setGravity(Gravity.CENTER);
    tvDigit.setTextSize(18);
    customViewOval(tvDigit, ContextCompat.getColor(this, R.color.teal_500), ContextCompat.getColor(this, R.color.transparant), 100, 100);

    TextView tvName = new TextView(this);
    tvName.setText("Richard");
    tvName.setGravity(Gravity.CENTER);
    tvName.setTextColor(ContextCompat.getColor(this, R.color.black_80));
    tvName.setPadding(10, 0, 0, 0);
    tvName.setTextSize(18);

    lv.addView(tvDigit);
    lv.addView(tvName);

    customViewWithRadius(lv, ContextCompat.getColor(this, R.color.lightgrey), ContextCompat.getColor(this, R.color.transparant), 90);
}

custom view for digit within oval

public static void customViewOval(View view, int backgroundColor, int borderColor, int height, int width) {
    GradientDrawable shape = new GradientDrawable();
    shape.setShape(GradientDrawable.OVAL);
    shape.setColor(backgroundColor);
    shape.setStroke(1, borderColor);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(height, width);
    view.setLayoutParams(layoutParams);
    view.setBackgroundDrawable(shape);
}

custom view for main background with radius

private static void customViewWithRadius(View view, int backgroundColor, int borderColor, float radius) {
    GradientDrawable shape = new GradientDrawable();
    shape.setShape(GradientDrawable.RECTANGLE);
    shape.setCornerRadii(new float[]{radius, radius, radius, radius, radius, radius, radius, radius});
    shape.setColor(backgroundColor);
    shape.setStroke(1, borderColor);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    view.setLayoutParams(layoutParams);
    view.setPadding(10, 10, 40, 10);
    view.setBackgroundDrawable(shape);
}

Hope it'll help to solve your problem.



来源:https://stackoverflow.com/questions/40968325/gradientdrawable-with-oval-shape-not-working-inside-programatically-added-text-v

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!