我有随机数生成器,当我在'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)