Панель рейтинга Android выходит за пределы диалогового окна

панель рейтинга в моем диалоговом окне выходит за пределыПанель рейтинга Android выходит за пределы диалогового окна

 final AlertDialog.Builder popDialog = new AlertDialog.Builder(ExercisesActivity.this);
 final RatingBar rb = new RatingBar(ExercisesActivity.this);
 popDialog.setIcon(android.R.drawable.btn_star_big_on);
 rb.setMax(6);
 popDialog.setTitle("Set Difficulty");
 popDialog.setView(rb);
 // Button OK
 popDialog.setPositiveButton(android.R.string.ok,
       new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int which) {
              //do things
       }

 });
 popDialog.create();
 popDialog.show();

setMax() не влияет

3
0
181
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Сначала укажите высоту и ширину:

 LinearLayout linearLayout = new LinearLayout(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
    );

linearLayout.addView(rb);

Устанавливает количество отображаемых звездочек, применяя setNumStars(x). Чтобы они отображались правильно, рекомендуется, чтобы ширина макета этого виджета была оберткой содержимого. Нравиться:

rb.setNumStars(6);

Вы можете установить свою ширину для себя следующим образом:

 rb.getLayoutParams().width = WindowManager.LayoutParams.MATCH_PARENT; 
// you can also use WRAP_CONTENT but I think that for your dialog MATCH_PARENT is better

rb не имеет параметра ширины

danucebi 16.04.2019 08:10

Метод установитьМакс() определяет максимальное количество пусков, которое может выбрать пользователь.

В соответствии с вашим запросом, я надеюсь, вы ищете набор отображаемых звезд.

поэтому в вашем коде Удалять

rb.setMax(6);

И Заменять это с

rb.setNumStars(6);

Надеюсь, IV дал вам решение :)

Ответ принят как подходящий

Если вы добавите RatingBar непосредственно в AlertDialog, это вызовет связанный вывод, поскольку мы генерируем Ratingbar динамически, а не задаем ширину.

Вы можете добиться того же, установив LayoutParams на свой RatingBar и добавив свой RatingBar в LinearLayout и добавив этот вид LinearLayout в AlertDialog.

Проверьте ниже образец:

final AlertDialog.Builder popDialog = new AlertDialog.Builder(getActivity());
popDialog.setTitle("Set Difficulty");
popDialog.setIcon(android.R.drawable.btn_star_big_on);

LinearLayout linearLayout = new LinearLayout(ExercisesActivity.this);
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT,
        LinearLayout.LayoutParams.WRAP_CONTENT
);

final RatingBar rating = new RatingBar(ExercisesActivity.this);
rating.setLayoutParams(lParams);
rating.setNumStars(6);
linearLayout.addView(rating);

popDialog.setView(linearLayout);

// Button OK
popDialog.setPositiveButton(android.R.string.ok,
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            //do things
        }
    });
popDialog.create();
popDialog.show();

Выход:

Спасибо за оценку и принятие в качестве ответа. Не могли бы вы проголосовать, чтобы другие люди могли использовать то же решение.

Ajay Mehta 16.05.2019 08:27

Другие вопросы по теме