小编ear*_*jim的帖子

Android错误膨胀类EditText

我遇到了一个奇怪的问题.每当我添加一个时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)

android android-xml android-edittext

4
推荐指数
1
解决办法
4674
查看次数

Android阻止回到之前的Activity

用户点击后如何防止,只能在登录前返回一页Activity.如果在登录前点击最后一页Activity,则退出应用程序.现在,如果我点击返回它将显示登录页面并需要再次登录.一旦用户登录,除非他们点击退出按钮,否则不显示登录Activity.

有什么想法吗?谢谢.

android

4
推荐指数
2
解决办法
6031
查看次数

以编程方式更改EditText线颜色和EditText光标颜色以获得最低API级别14?

我曾尝试过下面的代码片段,但它不适用于以下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.

android

4
推荐指数
1
解决办法
57
查看次数

保留的Fragment中的实例变量变为null

作为一种替代方案Intent,我FragmentActivity重新创建期间将数据保存在保留的无头中(我保存的对象可能非常大,并且它不符合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)

FragmentonSaveInstanceState()我的方法中将数据保存到此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)

android android-fragments

4
推荐指数
1
解决办法
1145
查看次数

4
推荐指数
2
解决办法
789
查看次数

设备在Android中处于睡眠状态时,AlarmManager警报不起作用

即使该应用被终止或设备进入睡眠状态,我也需要在每个时间段运行一段代码。

我正在使用它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 alarmmanager

4
推荐指数
1
解决办法
364
查看次数

从另一个布局更改 TextView

对于我在 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)

android android-layout

3
推荐指数
1
解决办法
3621
查看次数

带有 SpannableString 的 Android Canvas drawText

我做了一个自定义的View使用Canvas.drawText()得出一些SpannableString秒。

SpannableString.setSpan()在文本包含我制作的表情符号时调用(我不喜欢默认样式的表情符号)。我发现Canvas.drawText()它没有绘制我设置的跨度,而是绘制了默认样式的表情符号。我试图TextView.setText()通过相同的方式调用SpannableString它并且它有效。我想用来Canvas绘制文本以提高性能(否则,TextView在滚动时更新几个sListView会导致严重的性能问题)。怎样绘制SpannableStringCanvas

对不起,我的英语不好,我不是母语人士。感谢提前!

编辑:实际上我做了这个自定义View是为了显示文本转换的动画。几个文本将水平穿过屏幕。我遇到的问题是TextView's draw 方法导致时间太多,动画看起来很糟糕。所以我想直接使用Canvas. 可悲的是,我切换到StaticLayout并仍然发现动画很生涩。

android canvas spannablestring

3
推荐指数
1
解决办法
2219
查看次数

如何防止服务被破坏

我有一个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)

android

3
推荐指数
1
解决办法
1678
查看次数

MediaPlayer中的IllegalStateException设置数据源方法

我在重复当前歌曲的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)

我怎样才能解决这个问题?

android

3
推荐指数
2
解决办法
1270
查看次数