果冻豆和冰淇淋三明治中的android数字选择器默认设计更改

Posted

技术标签:

【中文标题】果冻豆和冰淇淋三明治中的android数字选择器默认设计更改【英文标题】:android number picker default design changes in jelly bean and ice-cream sandwitch 【发布时间】:2013-08-02 07:48:07 【问题描述】:

我创建了一个显示数字选择器的 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(); 
 

【问题讨论】:

【参考方案1】:

引用自文档

如果当前主题派生自主题,则小部件将当前值显示为可编辑的输入字段,上面有一个递增按钮,下面有一个递减按钮。 长按按钮可以快速更改当前值。点击输入字段可以输入所需的值。

您需要设置派生自 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_
    android:layout_
    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_
        android:layout_
        android:text="@string/hello_world" />

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

</RelativeLayout>

dialog.xml

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

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

    <Button
        android:id="@+id/button2"
        android:layout_
        android:layout_
        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_
        android:layout_
        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>

快照

【讨论】:

我已将主题设置为 Theme.NoTitleBar.Fullscreen 但我仍然无法在数字选择器中找到任何设计更改............它仍然显示如上图所示图片...... ***.com/questions/5752619/… @Denny 您也可以将主题设置为所需的活动。我刚刚尝试过,它对我有用。如果对您有帮助,您可以接受答案 是的,先生,它可以工作,但现在的问题是我的整个应用程序设计已经改变 我们可以只为数字选择器提供主题【参考方案2】:

您可以将此属性添加到您的 NumberPicker 中

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

例如

<NumberPicker   android:theme="@android:style/Theme.Dialog"
                android:layout_
                android:layout_ />

这会将影响仅限于数字选择器小部件,而不是整个活动页面。

【讨论】:

是的,但是如何在主题中设置选举分隔符和文本颜色? 我的意思是“选择分隔符”

以上是关于果冻豆和冰淇淋三明治中的android数字选择器默认设计更改的主要内容,如果未能解决你的问题,请参考以下文章

冰淇淋三明治中 HttpURLConnection 的 FileNotFoundException

如何设计冰淇淋三明治标签之间的分隔线?

更改冰淇淋三明治中的状态栏颜色 [重复]

从冰淇淋三明治添加应用程序功能

Android 4.0内核源码? [关闭]

Android模拟器上的Flash Player