问题
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