Изменения дизайна по умолчанию для выбора номера Android в желейных бобах и сэндвиче с мороженым

я создал приложение для Android, которое отображает средство выбора чисел, все работает нормально ... но проблема в дизайне .... когда я запускаю приложение в имбирном прянике, средство выбора чисел выглядит хорошо .... но когда я запускаю то же самое в сэндвиче с мороженым и желейных бобах, дизайн средства выбора чисел был изменен, как показано ниже.

может кто-нибудь, пожалуйста, скажите мне, как сохранить дизайн выбора номера по умолчанию, который находится в имбирном прянике в желейных бобах

когда бежит в бутерброде с мороженым и мармеладных бобах

введите здесь описание изображения

когда работает в имбирном хлебе

введите здесь описание изображения

я использую пользовательское диалоговое окно, в котором находится средство выбора номера, код приведен ниже

import android.app.Activity; 
import android.app.Dialog; 
import android.graphics.drawable.ColorDrawable; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.NumberPicker; 

public class QuantityChangeDialog extends Dialog implements android.view.View.OnClickListener { 

public Activity c; 
public Dialog d; 
public Button save, cancel; 
NumberPicker np; 

public QuantityChangeDialog(Activity a) { 
super(a); 
// TODO Auto-generated constructor stub 
this.c = a; 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

requestWindowFeature(Window.FEATURE_NO_TITLE); 
this.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
setContentView(R.layout.selecteditem_dialog); 
save = (Button) findViewById(R.id.btn_save); 
cancel = (Button) findViewById(R.id.btn_cancel); 
save.setOnClickListener(this); 
cancel.setOnClickListener(this); 
np = (NumberPicker) findViewById(R.id.qntypicker); 
np.setMaxValue(120); 
np.setMinValue(1); 
np.setValue(3); 

} 

@Override 
public void onClick(View v) { 
switch (v.getId()) { 
case R.id.btn_save: 
c.finish(); 
break; 
case R.id.btn_cancel: 
dismiss(); 
break; 
default: 
break; 
} 
dismiss(); 
} 
}

person Denny    schedule 01.08.2013    source источник


Ответы (2)


Цитата из документов

Если текущая тема является производной от Theme, виджет представляет текущее значение в виде редактируемого поля ввода с кнопкой увеличения вверху и кнопкой уменьшения внизу. Длительное нажатие на кнопки позволяет быстро изменить текущее значение . Нажатие на поле ввода позволяет ввести желаемое значение.

Вам нужно установить свою тему, полученную из Theme, например, из примера Theme.NoTitleBar.Fullscreen.

Activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >


    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Open" />

</RelativeLayout>

диалог.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:theme = "@style/cust_dialog"
    android:layout_height="fill_parent" >

    <NumberPicker
        android:id="@+id/numberPicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="64dp" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/numberPicker1"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="98dp"
        android:layout_toRightOf="@+id/numberPicker1"
        android:text="Cancel" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_marginRight="16dp"
        android:layout_toLeftOf="@+id/numberPicker1"
        android:text="Set" />

</RelativeLayout>

Затем, чтобы отобразить пользовательский диалог

public class MainActivity extends Activity implements NumberPicker.OnValueChangeListener
{
    private  TextView tv;
    static Dialog d ;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textView1);
        tv.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                       tv.setTextColor(Color.RED);
                }
                else if (event.getAction() == MotionEvent.ACTION_UP) {
                        // set to normal color
                     tv.setTextColor(0);  
                }

                return true;
            }


            });
        Button b = (Button) findViewById(R.id.button11);
         b.setOnClickListener(new OnClickListener()
         {

            @Override
            public void onClick(View v) {
                 show();
            }
            });
           }
     @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

         Log.i("value is",""+newVal);

     }

    public void show()
    {


         final Dialog d=new Dialog(this,R.style.cust_dialog);
         d.setTitle("NumberPicker");
         d.setContentView(R.layout.dialog);
         Button b1 = (Button) d.findViewById(R.id.button1);
         Button b2 = (Button) d.findViewById(R.id.button2);
         final NumberPicker np = (NumberPicker) d.findViewById(R.id.numberPicker1);
         np.setMaxValue(100);
         np.setMinValue(0);
         np.setWrapSelectorWheel(false);
         np.setOnValueChangedListener(this);
         b1.setOnClickListener(new OnClickListener()
         {
          @Override
          public void onClick(View v) {
              tv.setText(String.valueOf(np.getValue()));
              d.dismiss();
           }    
          });
         b2.setOnClickListener(new OnClickListener()
         {
          @Override
          public void onClick(View v) {
              d.dismiss();
           }    
          });
       d.show();


    }
}

Стили.xml

</style>
  <style name="cust_dialog" parent="@android:style/Theme.NoTitleBar.Fullscreen"> 
</style>

Моментальный снимок

введите здесь описание изображения

person Raghunandan    schedule 01.08.2013
comment
Я установил тему на Theme.NoTitleBar.Fullscreen, но все же не смог найти никаких изменений в дизайне в средстве выбора чисел.......... оно по-прежнему отображается, как показано на первом рисунке выше...... - person Denny; 01.08.2013
comment
stackoverflow .com/questions/5752619/ - person Raghunandan; 01.08.2013
comment
@Denny, вы также можете настроить тему на требуемую активность. Я только что попробовал, и это работает для меня. Если это поможет, вы можете принять ответ - person Raghunandan; 01.08.2013
comment
Да, сэр, это работает, но теперь проблема в том, что весь дизайн моего приложения изменился. - person Denny; 01.08.2013
comment
мы можем дать тему только для выбора номера - person Denny; 01.08.2013
comment
@Denny использует его только для действий, в которых есть средство выбора номера. установите тему для действия в манифесте, у которого есть средство выбора номера. - person Raghunandan; 01.08.2013
comment
сэр, на самом деле мой выбор номера находится в диалоговом окне - person Denny; 01.08.2013
comment
@Denny вы можете устанавливать темы только для диалога - person Raghunandan; 01.08.2013
comment
давайте продолжим это обсуждение в чате - person Denny; 01.08.2013

Вы можете просто добавить этот атрибут в свой NumberPicker

android:theme="@android:style/Theme.Dialog"

E.g.

<NumberPicker   android:theme="@android:style/Theme.Dialog"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

Это ограничит влияние только виджета выбора номера, а не всей страницы активности.

person Montri M    schedule 08.03.2016
comment
да, но как установить выборный разделитель и цвет текста в теме? - person Mike6679; 19.03.2018
comment
Я имею в виду разделитель выбора - person Mike6679; 19.03.2018