Android:RNG错误和按钮主题

时间:2015-04-27 07:11:48

标签: java android android-studio

我有随机数生成器,当我在'numberTo'字符串中键入0并且给我int:“0”时它崩溃了。有了这个,我无法删除editText并显示由于TextWatcher的提示。请帮助我!而且我们如何添加一个不同颜色的按钮,你能解释一下吗?

这是我的代码:

activity_main.xml中

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="bedi.gursimran.materialtest.MainActivity">

        <include
            android:id="@+id/app_bar"
            layout="@layout/app_bar" />

        <TextView
            android:textSize="68dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/random_text"
            android:text="Number"
            android:layout_marginTop="12dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="false"
            android:layout_marginLeft="50dp"
            />

        <EditText
            android:layout_width="140dp"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:padding="12dp"
            android:ems="10"
            android:id="@+id/text_from"
            android:maxLength="6"
            android:hint="From"
            android:layout_below="@+id/app_bar"
            android:layout_alignParentStart="true"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="24dp"
            android:backgroundTint="@color/primaryColorDark"
            android:textSize="@dimen/edit_text_size"/>

        <EditText
            android:layout_width="140dp"
            android:layout_height="wrap_content"
            android:inputType="number"
            android:ems="10"
            android:padding="12dp"
            android:id="@+id/text_to"
            android:layout_below="@+id/text_from"
            android:layout_alignParentStart="true"
            android:maxLength="8"
            android:hint="To"
            android:backgroundTint="@color/primaryColorDark"
            android:layout_marginTop="8dp"
            android:layout_marginLeft="10dp"
            android:textSize="@dimen/edit_text_size"/>

        <Button
            android:layout_width="140dp"
            android:layout_height="70dp"
            android:text="Generate"
            android:id="@+id/generate_button"
            android:onClick="generate"
            android:layout_below="@+id/app_bar"
            android:layout_marginLeft="190dp"
            android:layout_marginTop="51dp"
            android:textColor="#fffafafa"
            android:textSize="22dp"
            android:backgroundTint="@color/accentColor"
            />



    </RelativeLayout>

</android.support.v4.widget.DrawerLayout>

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
        <!-- Customize your theme here. -->
    </style>

    <!--Base theme-->
    <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar" >

        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryColorDark</item>
        <item name="colorAccent">@color/accentColor</item>

        <!-- Generate Button Color -->
        <item name="android:colorButtonNormal">@color/primaryColor</item>


    </style>


    <!--Action Bar theme-->
    <style name="MyCustomToolBarTheme" parent="ThemeOverlay.AppCompat.Light">

        <!--The title-->
        <item name="android:textColorPrimary">#FFFFFF</item>

        <item name="android:textColor">#FFFFFF</item>

        <!--The 'overflow icon-->
        <item name="android:textColorSecondary">#FFFFFF</item>


    </style>


    <style name="ActionBarPopupThemeOverlay" parent="ThemeOverlay.AppCompat.Light" >

        <item name="android:background">@android:color/white</item>

        <item name="android:textColor">#de000000</item>
    </style>




</resources>

app_bar.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:background="@color/primaryColor"
    app:theme="@style/MyCustomToolBarTheme"
    android:paddingTop="@dimen/app_bar_top_padding"
    android:elevation="@dimen/action_bar_elevation"
    app:popupTheme="@style/ActionBarPopupThemeOverlay"
    >

</android.support.v7.widget.Toolbar>

最重要的是...... MainActivity.java

public class MainActivity extends ActionBarActivity implements TextWatcher {

    private Toolbar toolbar;

    TextView randomText;
    EditText editTextFrom;
    EditText editTextTo;
    Button generate_button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //toolbar= (Toolbar) findViewById(R.id.app_bar);
        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);

        //Generated Number
        randomText = (TextView) findViewById(R.id.random_text);
        Typeface myCustomFontTextView = Typeface.createFromAsset(getAssets(), "fonts/RobotoCondensed-Light.ttf");
        randomText.setTypeface(myCustomFontTextView);

        //From Text
        editTextFrom = (EditText) findViewById(R.id.text_from);
        Typeface myCustomFontEditViewFrom = Typeface.createFromAsset(getAssets(), "fonts/RobotoCondensed-Regular.ttf");
        editTextFrom.setTypeface(myCustomFontEditViewFrom);

        editTextFrom.addTextChangedListener(this);

        //To Text
        editTextTo = (EditText) findViewById(R.id.text_to);
        Typeface myCustomFontEditViewTo = Typeface.createFromAsset(getAssets(), "fonts/RobotoCondensed-Regular.ttf");
        editTextTo.setTypeface(myCustomFontEditViewTo);

        editTextTo.addTextChangedListener(this);

        //Generate Button
        generate_button = (Button) findViewById(R.id.generate_button);
        Typeface myCustomFontButton = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Bold.ttf");
        generate_button.setTypeface(myCustomFontButton);


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
            return true;
        }

        //    if (id == R.id.navigate) {
        //        startActivity(new Intent(this, SubActivity.class));
        //    }

        return super.onOptionsItemSelected(item);
    }


    public void generate(View view) {

        //text
        EditText from = (EditText) findViewById(R.id.text_from);
        EditText to = (EditText) findViewById(R.id.text_to);

        String stringFrom, stringTo;

        stringFrom = from.getText().toString();
        stringTo = to.getText().toString();

        int numberFrom, numberTo;


        if (stringFrom.equals("")) {
            stringFrom = "0";
        }
        if (stringTo.equals("")) {
            stringTo = "0";
        }

        numberFrom = Integer.parseInt(stringFrom);
        numberTo = Integer.parseInt(stringTo);


        Random random = new Random();
        int number = random.nextInt(numberTo + 1);


        if(numberFrom != numberTo) {
            while (number < numberFrom || number > numberTo) {
                number = random.nextInt(numberTo + 1);
            }
        } else {
            numberFrom = numberTo = number;
        }


        // } catch (NumberFormatException e) {}

        try {
            TextView myText = (TextView) findViewById(R.id.random_text);
            String myString = String.valueOf(number);
            myText.setText(myString);

        } catch (NumberFormatException e) {
            TextView myText = (TextView) findViewById(R.id.random_text);
            myText.setText("Enter a number greater than zero");
        }

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable editable) {

        int numberto;

        try {
            numberto = Integer.parseInt(editable.toString());
        } catch (NumberFormatException e) {
            numberto = 0;
        }

        if (numberto == 0) {
            editable.replace(0, editable.length(), "1");
        }
    }
}

修改 当我把工具TextWatcher拿出来时,错误就消失了。请帮我按钮颜色,我还是不知道如何有2个不同颜色的按钮。谢谢!

编辑2 当我将两者都设为null时,给我这个日志。请帮忙!!

 2414-2414/bedi.gursimran.materialtest E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: bedi.gursimran.materialtest, PID: 2414
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:4007)
            at android.view.View.performClick(View.java:4756)
            at android.view.View$PerformClick.run(View.java:19749)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4002)
            at android.view.View.performClick(View.java:4756)
            at android.view.View$PerformClick.run(View.java:19749)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.IllegalArgumentException: n <= 0: 0
            at java.util.Random.nextInt(Random.java:182)
            at bedi.gursimran.materialtest.MainActivity.generate(MainActivity.java:120)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4002)
            at android.view.View.performClick(View.java:4756)
            at android.view.View$PerformClick.run(View.java:19749)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

0 个答案:

没有答案