我遇到了一个奇怪的问题.每当我添加一个时EditText,我的Android应用程序都会崩溃Activity.为了测试,我打开一个新的干净项目,如果有一个项目,新项目将崩溃EditText.因此,我认为问题是由Android Studio或其他环境设置引起的.
以下是activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
android:id="@+id/activity_main"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="yichun.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/textView"
app:layout_constraintLeft_toLeftOf="@+id/activity_main"
app:layout_constraintTop_toTopOf="@+id/activity_main"
app:layout_constraintRight_toRightOf="@+id/activity_main"
app:layout_constraintBottom_toBottomOf="@+id/activity_main"/>
<EditText
android:layout_width="218dp"
android:layout_height="45dp"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
tools:layout_editor_absoluteX="90dp"
android:id="@+id/editText"
app:layout_constraintBottom_toTopOf="@+id/textView" android:layout_marginBottom="40dp"/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java公共类MainActivity扩展AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
错误信息
E/AndroidRuntime: FATAL EXCEPTION: main
Process: yichun.myapplication, …Run Code Online (Sandbox Code Playgroud) 用户点击后如何防止,只能在登录前返回一页Activity.如果在登录前点击最后一页Activity,则退出应用程序.现在,如果我点击返回它将显示登录页面并需要再次登录.一旦用户登录,除非他们点击退出按钮,否则不显示登录Activity.
有什么想法吗?谢谢.
我曾尝试过下面的代码片段,但它不适用于以下API 21:
editText.getBackground().setColorFilter(editTextColor, PorterDuff.Mode.SRC_IN);
editText.getBackground().mutate().setColorFilter(editTextColor,PorterDuff.Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)
所以请建议我如何更改API 14.
作为一种替代方案Intent,我Fragment在Activity重新创建期间将数据保存在保留的无头中(我保存的对象可能非常大,并且它不符合a的大小限制Intent,我认为这是比序列化更快的方法 -例如,反序列化为JSON).
虽然我的实现有点不同,但我从这篇Google文档中得到了这个想法.
的Fragment:
public class DataFragment extends Fragment {
private Data data;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public void setData(Data data) {
this.data = data;
}
public Data getData() {
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
我Fragment在onSaveInstanceState()我的方法中将数据保存到此Activity:
@Override
protected void onSaveInstanceState(Bundle outState) {
FragmentManager fm = getSupportFragmentManager();
dataFragment = (DataFragment) fm.findFragmentByTag(TAG_DATA);
if (dataFragment == null) {
dataFragment = …Run Code Online (Sandbox Code Playgroud) 即使该应用被终止或设备进入睡眠状态,我也需要在每个时间段运行一段代码。
我正在使用它AlarmManager来实现这一目标,但是它可以正常工作,但是当设备休眠约五分钟时,Service它不再被调用了……有人知道我在做什么错吗?
这是我的代码:
public class Profiler extends IntentService {
public static final int ALARM_MANAGER_ID = 21436587;
public Profiler() {
super("Profiler");
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
JodaTimeAndroid.init(getApplicationContext());
System.out.println("Testing profiles");
List<Profile> profiles = MainActivity.getStoredProfiles(getApplicationContext());
if (profiles != null) {
for (Profile profile : profiles) {
if(profile.check()) {
profile.set(getApplicationContext());
}
}
}
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent2 = new Intent(getApplicationContext(), Profiler.class);
PendingIntent pIntent = PendingIntent.getService(getApplicationContext(), ALARM_MANAGER_ID, intent2, PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, DateTime.now().plusSeconds(10).getMillis(), pIntent);
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个问题。这种呼叫服务的方法可靠吗? …
对于我在 Android 中的最新项目,我需要从 myTextView中设置一个R.layout.header(我的 NavDrawer 的内容,请参阅下面的屏幕截图) MainActivity,它使用activity_main布局。
为此,我调用我的SetUsername()方法,其中包含以下代码以从首选项中获取用户名:
private void SetUsername(){
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String userNamePref = preferences.getString("username", "DEFAULT");
//Change the Username in R.layout.header
}
Run Code Online (Sandbox Code Playgroud)
要设置用户名,我首先做了
TextView username = (TextView)findViewById(R.id.usernameHeader);
username.setText(userNamePref);
Run Code Online (Sandbox Code Playgroud)
这不起作用 - 显然,因为R.id.usernameHeader位于R.layout.header中。
所以我用了这个:
setContentView(R.layout.header);
TextView username = (TextView)findViewById(R.id.usernameHeader);
username.setText(userNamePref);
Run Code Online (Sandbox Code Playgroud)
这正确地改变了我的 NavDrawer 中的文本,但是activty_main布局消失了,所以我setContentView(R.layout.activity_main)在函数的底部添加了。一切都按预期进行,但文本没有改变。
为了获得更好的想法,我制作了一个屏幕截图,以便您可以看到我到底想要更改什么:

我的布局:
活动_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" …Run Code Online (Sandbox Code Playgroud) 我做了一个自定义的View使用Canvas.drawText()得出一些SpannableString秒。
我SpannableString.setSpan()在文本包含我制作的表情符号时调用(我不喜欢默认样式的表情符号)。我发现Canvas.drawText()它没有绘制我设置的跨度,而是绘制了默认样式的表情符号。我试图TextView.setText()通过相同的方式调用SpannableString它并且它有效。我想用来Canvas绘制文本以提高性能(否则,TextView在滚动时更新几个sListView会导致严重的性能问题)。怎样绘制SpannableString用Canvas?
对不起,我的英语不好,我不是母语人士。感谢提前!
编辑:实际上我做了这个自定义View是为了显示文本转换的动画。几个文本将水平穿过屏幕。我遇到的问题是TextView's draw 方法导致时间太多,动画看起来很糟糕。所以我想直接使用Canvas. 可悲的是,我切换到StaticLayout并仍然发现动画很生涩。
我有一个Service跟踪用户的位置,在我得到用户的位置的时候GoogleApiClient.
它发生了一些Service停止,依赖互联网或模型电话Service停止向webservice发送位置.好像被摧毁了.
我怎么能阻止这个?
public class LocationService extends Service implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {
private static final String TAG = "LocationService";
public long UPDATE_MILLISECONDS_DEFAULT = 180000;
private boolean currentlyProcessingLocation = false;
private LocationRequest locationRequest;
private GoogleApiClient googleApiClient;
@Override
public void onCreate() {
Log.d(TAG,"Location service create");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// if we are currently trying to get a location and the alarm manager has called …Run Code Online (Sandbox Code Playgroud) 我在重复当前歌曲的onCompletion听众中使用以下代码MediaPlayer。
if (isRepeat) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
mMediaPlayer.reset();
}
try {
mMediaPlayer.setDataSource(MainActivity.localTrackList.get(MainActivity.currentOffset).getPath());
mMediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息,
at android.media.MediaPlayer._setDataSource(Native Method)
09-15 09:05:19.884 12545-12545/ W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1115)
09-15 09:05:19.884 12545-12545/ W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1100)
09-15 09:05:19.884 12545-12545/ W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1079)
09-15 09:05:19.884 12545-12545/ W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1028)
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?