-1

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.

enter image description here

Any help will be highly appreciated.

Jay Rathod
  • 11,131
  • 6
  • 34
  • 58

1 Answers1

2

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...

Kitkat device screenshot

Marshmallow device screenshot

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.

Bhavnik
  • 2,020
  • 14
  • 21
  • I will try this and let you know. Actually in my scenario i have take *Text View* and *Button* as you can see in OP. – Jay Rathod Dec 06 '16 at 05:11
  • This is not working while i am adding this with `Text View` and `Button`. Check my question above i want to implement in same manner. – Jay Rathod Dec 06 '16 at 06:44
  • You can see the `Text View's` text is set to the `Button's` `setText` method. – Jay Rathod Dec 06 '16 at 06:50
  • Hello, I've tried with button and still it is working properly with my code, I would like to know that why are you setting TextView's text in Button's text while you can use TextView instead of Button and set text individually in both of TextView – Bhavnik Dec 06 '16 at 07:14
  • What I've done here is took a layout in my xml file, set background with round corner in that layout, created Text View dynamically and set number and other properties, created Oval background for that Text View and, again created Text View dynamically for name and set other properties and at last point added both of that views in my layout which is defined in my xml file. – Bhavnik Dec 06 '16 at 07:19
  • @jaydroider Why you want to use button in your scenario, you can change as per above code, Answer is proper as your requirement, you have to change your code or you have to use logic from given answer – Mahesh Kavathiya Dec 06 '16 at 07:31
  • @MaheshKavathiya I have used logic in my scenario from above code but it is not taking effect of oval shape in numbered `Text View`. – Jay Rathod Dec 06 '16 at 07:38
  • Can you please share screenshot after adding these views dynamically??? – Bhavnik Dec 06 '16 at 07:40
  • @Bhavnik I will get back to you after some time. – Jay Rathod Dec 06 '16 at 07:41