我的代码中有一行标记为黄色:
getSupportActionBar().setDisplayShowHomeEnabled(true);
Run Code Online (Sandbox Code Playgroud)
安装appcompat-v7:22.1后, 它显示了一个提示:
"方法调用可能会产生java.lang.nullpointerexception".
应该用什么来代替getSupportActionBar()?
我最近更新到AppCompatActivity并切换ActionBar到ToolBar.
当我检查xml时,我发现了这两个属性 -
android:layout_height="wrap_content"
Run Code Online (Sandbox Code Playgroud)
和
android:minHeight="?attr/actionBarSize"
Run Code Online (Sandbox Code Playgroud)
这两个属性有什么区别?为什么layout_height设置wrap_content在ToolBar文档中?
是否有必要同时使用这两个属性?
java android material-design android-toolbar appcompatactivity
它在5.1上工作正常,但在4.1.2上没有
我错过了什么?
这是活动xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myApp="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/transfer"
android:title="@string/transfer"
android:icon="@drawable/ic_transfer"
myApp:showAsAction="always" />
<item android:id="@+id/refresh"
android:title="@string/refresh"
android:icon="@drawable/ic_refresh"
myApp:showAsAction="always" />
<item android:id="@+id/about"
android:title="@string/about"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="100"
myApp:showAsAction="never" />
<item android:id="@+id/help"
android:title="@string/title_activity_help"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="101"
myApp:showAsAction="never" />
<item android:id="@+id/settings"
android:title="@string/settings"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="102"
myApp:showAsAction="never" />
<item android:id="@+id/search"
android:title="@string/search"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="103"
myApp:showAsAction="never" />
<item android:id="@+id/logout"
android:title="@string/logout"
android:icon="@android:drawable/ic_menu_info_details"
android:orderInCategory="104"
myApp:showAsAction="never" />
</menu>
Run Code Online (Sandbox Code Playgroud)
这是我的活动类(扩展了另一个扩展AppCompatActivity的活动):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_activity, menu);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下appcompat库:
'com.android.support:appcompat-v7:22.2.0'
Run Code Online (Sandbox Code Playgroud) android android-actionbar android-4.1-jelly-bean appcompatactivity
我正在关注fabric的文档以获得时间表.如果我根据他们的指令使用ListActivity,它工作正常.但我想添加自己的工具栏,所以我使用了AppCompatActivity.这是我的java文件的一部分:
public class TimelineActivity extends AppCompatActivity{
public static final String QUERY = "QUERY";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timeline);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
SearchTimeline searchTimeline = new SearchTimeline.Builder()
.query(getIntent().getStringExtra(QUERY))
.build();
final TweetTimelineListAdapter adapter = new TweetTimelineListAdapter.Builder(this)
.setTimeline(searchTimeline)
.build();
ListView tweetList = (ListView)findViewById(R.id.tweet_list);
tweetList.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
这是我的xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".TimeLineActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_below="@id/appbar"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView android:id="@id/android:empty" …Run Code Online (Sandbox Code Playgroud) 我正在尝试更好地理解使用Material Design的原则(我是这个领域的新手,并且一直在阅读文档和教程,但主题对我来说仍然有点模糊),我会很高兴的一些帮助.到目前为止我尝试过的是两个文件夹(值和值-21),每个文件夹都有一个styles.xml文件 -
价值观/ styles.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"></style>
Run Code Online (Sandbox Code Playgroud)
值-V21/styles.xml:
<style name="AppTheme" parent="android:Theme.Material.NoActionBar"></style>
Run Code Online (Sandbox Code Playgroud)
问题从我尝试使用从AppCompatActivity继承的活动开始(据我所知,这是我需要做的事情,以便在Lollipop之前支持向设备的向后兼容性,例如Material Design?我是否正确?这里有更多信息大).如果我这样做,该应用程序将无法在具有API 21或更高版本的设备上运行,因为"AppTheme"必须从AppCompat继承.
我可以做的就是创建一个继承自AppCompat的基本主题,然后使两个文件中的样式继承该基本主题...但是我不再继承Material了....这让我想到了这个问题 -
Material Design只是一个给定的主题吗?如果是这样,我该如何解决我的问题?使用AppCompatActivity在这里完成了什么?或者,Material Design本质上只是一套我应该遵循的规则和原则?如果是这样,为什么我们需要Theme.Material.*呢?我会很高兴有任何关于这个问题的人可以给我的额外信息.
谢谢!
android backwards-compatibility material-design appcompatactivity
我正在按照教程制作验证器:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/
登录Activity需要扩展AccountAuthenticatorActivity,问题从这里开始:AccountAuthenticatorActivity扩展常规Activity而不是AppCompatActivity.
Activity在AppCompat中使用常规会导致Activity无ActionBar.我想使用AccountAuthenticatorActivity和有一个ActionBar.
android android-appcompat android-authenticator android-support-library appcompatactivity
我正在创建一个简单的应用程序来测试AppCompat,当我扩展AppCompatActivity应用程序崩溃时,当我运行应用程序时AppCompat(扩展android.app.Activity并且一切保持不变),
MainActivity extends Activity- 有效
MainActivity extends AppCompat Activity- 崩溃
测试 android 4.4
日志猫:
------------------------------------------------
05-01 23:03:44.916 E/dalvikvm(23031): heapsize Dalvik_dalvik_system_VMRuntime_nativeMinimumHeapSize 0
05-01 23:03:44.916 E/dalvikvm(23031): heapsize Dalvik_dalvik_system_VMRuntime_nativeMinimumHeapSize 15301176
05-01 23:03:44.966 E/dalvikvm(23031): Could not find class 'android.arch.core.internal.FastSafeIterableMap', referenced from method android.arch.lifecycle.LifecycleRegistry.<init>
05-01 23:03:44.986 E/AndroidRuntime(23031): FATAL EXCEPTION: main
05-01 23:03:44.986 E/AndroidRuntime(23031): Process: com.android.xDrawer, PID: 23031
05-01 23:03:44.986 E/AndroidRuntime(23031): java.lang.NoClassDefFoundError: android.arch.core.internal.FastSafeIterableMap
05-01 23:03:44.986 E/AndroidRuntime(23031): at android.arch.lifecycle.LifecycleRegistry.<init>(LifecycleRegistry.java:59)
05-01 23:03:44.986 E/AndroidRuntime(23031): at android.support.v4.app.SupportActivity.<init>(SupportActivity.java:47)
05-01 23:03:44.986 E/AndroidRuntime(23031): …Run Code Online (Sandbox Code Playgroud) 我想datePicker在 Jetpack compose 中单击按钮打开对话框。
为此,我在按钮的onClick操作中使用以下代码。
val context = LocalContext.current
Button(onClick = {
(context as AppCompatActivity).let {
val picker = MaterialDatePicker.Builder.datePicker().build()
picker.show(it.supportFragmentManager, picker.toString())
picker.addOnPositiveButtonClickListener {
// some code
}
}
})
Run Code Online (Sandbox Code Playgroud)
如果我使用的是ComponentActivity,supportFragmentManager则不受支持。
可以从 扩展活动AppCompatActivity吗?
或者有没有其他方法,如果上述解决方案不正确,我可以得到解决方案?
在Android中,从扩展一个类之间的主要区别是什么AppCompatActivity和ActionBarActivity?这些课程有何不同?
android android-appcompat android-activity appcompatactivity
我正在尝试使用AndroidX制作首选项屏幕,但遇到了一个小问题......
当我使用虚拟键盘上的“确定”按钮验证输入时,首选项未验证。(键盘被隐藏了,仅此而已......)
使用 AndroidX,我们无法再覆盖showDialog()...EditTextPreference并且我找不到另一种方法来访问该对话框以将其关闭。
总之,我希望:虚拟键盘上按钮的 DONE 操作验证 AlertDialog。
这是我的示例代码:
XML文件
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
<EditTextPreference
app:key="pref_1"
app:title="Test"
app:useSimpleSummaryProvider="true" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
偏好活动
public class MySettingsActivity extends AppCompatActivity implements
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
[...]
public static class HeaderFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.header_preferences, rootKey);
EditTextPreference pref1 = getPreferenceManager().findPreference("pref_1");
pref1.setOnBindEditTextListener(new EditTextPreference.OnBindEditTextListener() {
@Override
public void onBindEditText(@NonNull EditText editText) {
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud) android edittextpreference imeoptions appcompatactivity androidx