ActionBar是Android的窗口功能,可识别应用程序和用户位置,并提供用户操作和导航模式。
Android Espresso 在 ActionBar 中将文本键入 EditText
我的 ActionBar 中有一个由 XML 扩充的 SearchView 我的 ActionBar 中有一个 SearchView,它是从 XML 中膨胀的 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_menu_search" android:showAsAction="always|collapseActionView" android:icon="@drawable/action_bar_search_icon" android:actionViewClass="android.widget.SearchView"/> </menu> 我用这种方式在我的片段中将其充气: @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.search, menu); final MenuItem item = menu.findItem(R.id.action_menu_search); searchView = (SearchView) item.getActionView(); searchView.setOnQueryTextListener(this); } 我的测试: onView(withId(R.id.catalog_filter_indicator_header_text)).perform(click()); //enter text and wait for suggestions onView(withId(R.id.action_menu_search)).perform(click()); onViewisAssignableFrom(AutoCompleteTextView.class)).perform(click(), typeText("test")); 看起来该字段在开始输入时失去了焦点。而且我也不知道为什么。 找到所有视图,并且 typeText 语句顺利通过,但文本未出现在字段中。我也尝试过使用简单的 EditText 和自定义 android:actionLayout,但结果相同。 我有什么遗漏的吗? 此代码适用于我的 SerachView 中的 ActionBar,因为 SearchView 是我的 EditText 中唯一的 Fragment : onView(withId(R.id.action_search)).perform(click()); onView(isAssignableFrom(EditText.class)).perform(typeText("test"), pressKey(KeyEvent.KEYCODE_ENTER)); KeyEvent.KEYCODE_ENTER 是按下提交按钮的代码。 搜索视图有默认 ID。 你可以用这种方式在 Espresso 中得到它。 onView(withId(androidx.appcompat.R.id.search_src_text)).perform(typeText("example"), pressKey(KeyEvent.KEYCODE_ENTER)); 在 AndroidX 之前,ID 为 android.support.design.R.id.search_src_text 希望这有用。 最后,我决定创建自己的自定义操作,因为我无法输入文本工作。这是我的代码: public static ViewAction setText(final String text){ return new ViewAction(){ @Override public Matcher<View> getConstraints() { return allOf(isDisplayed(), isAssignableFrom(TextView.class)); } @Override public String getDescription() { return "Change view text"; } @Override public void perform(UiController uiController, View view) { ((TextView) view).setText(text); } }; } 此代码对于在 TextView 的所有子级中编写代码很有用。 F. 前,EditText。 我从https://stackoverflow.com/a/32850190/1360815获取此代码 SearchView中EditText的id是search_src_text onView(withId(R.id.action_menu_search)).perform(click()); onView(withId(R.id.search_src_text)).perform(typeText("test")); 接受的答案很好,但不再需要了,因为官方 Espresso 库包含与 replaceText 功能相同的功能。 您可以像下面这样使用它,而无需自定义实现 onView(withId(R.id.search_src_text)).perform(replaceText("test")) 这两个 ViewInteraction 提供对 SearchView 及其 EditText 的访问: /** @return {@link ViewInteraction} {@link SearchView}. */ private ViewInteraction onSearchView() { return Espresso.onView(ViewMatchers.withId(R.id.menu_action_search_view)); } /** @return {@link ViewInteraction} {@link SearchView} {@link EditText}. */ private ViewInteraction onSearchEditText() { return Espresso.onView(CoreMatchers.allOf( ViewMatchers.isDescendantOfA(ViewMatchers.withId(R.id.menu_action_search_view)), ViewMatchers.isAssignableFrom(EditText.class) )); } 像这样使用: @Test public void testSearchView() { onSearchView() .perform(ViewActions.click()); onSearchEditText() .perform(ViewActions.clearText() ,ViewActions.typeText("test")); }
从 android 中的片段更改自定义 ActionBar 标题
嗨,在下面的代码中,我有一个 fab 按钮,如果我按下 fab 按钮,用另一个片段替换一个片段,同时我也在更改标题。 但是片段被替换了但是
我制作了一个带有标题和功能弹出菜单的自定义工具栏,但我似乎无法在工具栏中显示搜索菜单。为此,搜索菜单图标甚至不会显示在工具栏中
IllegalArgumentException:ID 未引用此 Activity 内的视图
我一直在尝试为我的应用程序制作一个主页,其中包含一些现代仪表板和导航抽屉。 在我的代码中发现错误: E/AndroidRuntime:致命异常:main 进程:com.
我知道这里已经有很多这个问题的答案,如果我还没有尝试过我在这里看到的所有内容,我就不会创建另一个线程。 无论如何,问题很简单。我...
Android - Activity Home/向上箭头在 SDK 24 中具有额外的填充/边距
我刚刚将我的应用程序从使用 SDK 23 更新为 SDK 24。 我的活动出现了问题,显示了向上/主页箭头(即 getSupportActionBar().setDisplayHomeAsUpEnabled(true))...
在操作栏上按下“后退”按钮时,不会调用 onOptionsItemSelected
就这么简单,当我按下后退按钮时什么也没有发生。 这是我正在运行的代码: @覆盖 public View onCreateView(LayoutInflater inflater, ViewGroup 容器, ...
getActionBar().setHomeAsUpIndicator() 打破导航抽屉“汉堡”动画
在我的应用程序中,我使用导航抽屉。我为导航抽屉中的每个项目指定了不同的图标,用于打开导航抽屉。 当我最初启动应用程序时,抽屉图标...
我想要一个更大的操作栏。 因此,我更改了样式中的操作栏大小,现在我正在寻找更改图标大小并将文本也变大的方法。 这是我的风格:
实现新 API SplashScreen 后 DialogFragment 的边距/填充问题
我在我的应用程序上添加了新的 Splashscreen API (androidx.core:core-splashscreen:1.0.0-rc01),之后我的边距/填充被破坏,但仅适用于我的启动器活动 (MainActivity),特别是对于 di.. .
我看过这些答案。 我的 androidManifest.xml 文件包含: android:theme="@style/Theme.AppCompat.DayNight.NoActionBar" > 在我的一个片段中,我需要调用软键盘......
在 Android Kotlin 片段中删除 actionBar 的空间
我使用片段进行底部导航。 我已经用父主题 Theme.MaterialComponents.NoActionBar.Bridge 定义了一个主题。 它在活动上效果很好,但片段显示出差距。 这是
我的应用程序中有一个包含 3 个项目的操作栏。 由于空间问题只能显示 2 个,因此我希望显示第一个,其余的显示在溢出中。 然而在实践中...
我想将我的工具栏设置为操作栏,但由于您的工具栏是布局元素,因此它必须位于您的布局中。现在我的布局在我的片段中。 我在布局中添加了工具栏,并将其称为...
getActionBar().setDisplayHomeAsUpEnabled(true) 这是我用于普通 Android appCp、pact 活动以在两个或多个活动之间切换的方法。有人可以告诉我如何在 jetpack Compose 中执行此操作吗?
我的应用程序显示名称和图标。我想隐藏名字。 我怎样才能做到这一点?
我尝试在我的应用程序中实现操作栏。 菜单.xml 我尝试在我的应用程序中实现操作栏。 菜单.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/itemAdd" android:showAsAction="ifRoom|withText" android:title="ADD"> </item> <item android:id="@+id/itemRefresh" android:showAsAction="ifRoom|withText" android:title="REFRESH"> </item> <item android:id="@+id/itemHelp" android:title="HELP"> </item> </menu> 并创建了菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.menu, menu); return true; } 但是即使minSdkVersion是11,它也不显示操作栏。是什么原因? 删除操作栏活动的主题 在 androidManifest 文件中。现在它可以工作了... <application android:allowBackup="true" android:icon="@drawable/tasktodo" android:label="@string/app_name" > 请勿在应用程序清单文件中添加任何主题。如果您添加了一个,请删除并尝试运行它... 将班级中的 Activity 更改为 AppCompatActivity。如果你想快速添加它,这应该是最简单的。我将为刚接触 Android 操作系统的人添加代码: public class YourActivity extends Activity 进入 public class YourActivity extends AppCompatActivity 您必须将 Activity 的样式设置为 Theme.Holo 或其变体之一,ActionBar 才能显示。如果你想保持向后兼容性,请在 Activity 的 onCreate 中调用 setTheme : setTheme(android.R.style.Theme_Holo); 具有这样的清单的应用程序 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.Actionbartest" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="11" /> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> <activity android:name="MyActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest> Menu.xml 像这样 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/itemAdd" android:showAsAction="ifRoom|withText" android:title="ADD"> </item> <item android:id="@+id/itemRefresh" android:showAsAction="ifRoom|withText" android:title="REFRESH"> </item> <item android:id="@+id/itemHelp" android:title="HELP"> </item> </menu> 还有这样的活动 package com.example.Actionbartest; import android.app.Activity; import android.os.Bundle; import android.view.Menu; public class MyActivity extends Activity { /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.menu, menu); return true; } } 看起来像这样。 您确定您的手机或模拟器运行的是 Android 3.0 或更高版本吗?如果没有,您最终将得到屏幕截图。 要在旧设备上启用操作栏,您应该使用 AppCompat/support 库 (https://developer.android.com/tools/support-library/features.html) android:allowBackup="true" android:icon="@drawable/ic2" android:label="@string/app_name" android:theme="@android:style/Theme.Holo.Light.DarkActionBar" 这有效。把它放进你的 我导入import android.support.v7.app.AppCompatActivity; 然后编辑为public class MainActivity extends AppCompatActivity 添加依赖项 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:25.0.0' } <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" ... > <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MyActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- Put the RTA label here ... --> <meta-data android:name="RTA" android:value="RTA-5042-1996-1400-1577-RTA" /> </activity> </application> </manifest> 您可以尝试在 res>values>themes.xml 中更改主题 将父级更改为 Theme.AppCompat.Light.DarkActionBar <!-- Base application theme. --> <style name="Base.Theme.Android_Test_2_1" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your dark theme here. --> <!-- <item name="colorPrimary">@color/my_dark_primary</item> --> </style> 这个对我有用
我想添加一个用于注销的图标,但是当我包含以下代码时,图标显示在左侧,我感兴趣的是它显示在右侧,这是我的代码: // 我...
我知道使用原生 API 是不可能的。有没有解决方法来实现这种视图?
状态栏与应用程序的工具栏重叠,并且工具栏在 Android API 30+ 上消失了
我在 Android API 30+ 上遇到应用程序工具栏问题。设备的状态栏与我的应用程序的工具栏重叠,并且工具栏消失了。 API 低于 30(29、28、27、...)的设备上不会出现此问题。我