我正在尝试SearchView在工具栏中设置自定义样式,但我发现的所有建议解决方案均无效,并且未应用该样式。我正在使用androidx.appcompat.widget.SearchViewSearchView的版本。
在styles.xml我为 SearchView 创建了一个自定义样式并将其应用到 AppTheme 但 SearchView 的外观不会改变。我已经尝试了多种不同的风格属性,但没有任何改变。
样式.xml:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="searchViewStyle">@style/CustomSearchViewStyle</item>
</style>
<style name="AppTheme.Toolbar" parent="Base.ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="searchViewStyle">@style/CustomSearchViewStyle</item>
</style>
<style name="CustomSearchViewStyle" parent="Widget.AppCompat.SearchView">
<item name="searchIcon">@drawable/ic_custom_search</item>
<item name="suggestionRowLayout">@layout/custom_search_row</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
菜单.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search_white_24dp"
android:orderInCategory="100"
android:title="@string/search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="collapseActionView|ifRoom" />
</menu>
Run Code Online (Sandbox Code Playgroud)
我只想修改最近搜索建议列表中的时钟图标,但未应用自定义样式,我找不到任何其他方法来做到这一点。
编辑 1:
我刚刚将相同的内容添加androidx.appcompat.widget.SearchView到常规布局文件中,然后正确应用了样式。但是当用作actionViewClass在菜单中使用时,样式将被忽略。您知道如何在用作 时也应用样式actionViewClass吗?
在我的 Android 应用程序中,我希望在工具栏中有一个选项菜单,并且该功能运行良好。然而,在按下工具栏中的 3 个点后,菜单显示需要相当长的时间(大约一秒钟)。
起初我想,这可能是我的应用程序特有的一些问题,但我从 Android Studio 模板创建了一个新项目,问题仍然存在。(虽然感觉比我的应用程序快一点)
该菜单是按照文档中的说明创建的:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/manageBTConnection"
android:icon="@drawable/ic_bluetooth_white"
android:orderInCategory="100"
android:title="@string/connect"
app:showAsAction="ifRoom" />
<item
android:id="@+id/backgroundService"
android:title="Start background service" />
<item
android:id="@+id/sendToBackend"
android:title="Send to Backend" />
</menu>
Run Code Online (Sandbox Code Playgroud)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
return true;
}
Run Code Online (Sandbox Code Playgroud)
与其他 Android 应用程序相比,它比平时花费的时间要长得多,而且感觉很笨拙。
有没有办法加快下拉菜单的创建/显示?
非常感谢!
我已将 Google Maps MapView 添加到 Android 中的 Fragment。到目前为止,它是一张没有任何标记、选项或其他任何东西的清晰地图。尽管如此,每当我离开 Fragment 时,应用程序都会出现内存泄漏。
我已经尝试了我发现的所有建议的解决方案,例如将 MapView 附加到 Fragment Lifecycle,将其设置为不为 nullonDestroyView()等等,但内存泄漏仍然存在。
当前代码如下所示:
fragment_map.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
MapViewFragment.java
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_map, container, false);
mMapView = view.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState);
mMapView.onResume();
MapsInitializer.initialize(Objects.requireNonNull(getActivity()).getApplicationContext());
mMapView.getMapAsync(googleMap -> {
mGoogleMap = googleMap;
});
return view;
}
@Override
public void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有透明颜色图的 seaborn 创建热图,因为应该在背景中显示图像。到目前为止,热图创建工作正常,但是即使热图的线宽设置为 0.0,单元格之间的某些线仍然可见。
创建热图的代码如下所示:
ax = sns.heatmap(image, cmap="rocket_r", linewidths=0.0)
ax.collections[0].set_alpha(0.5)
Run Code Online (Sandbox Code Playgroud)
image64x64 numpy 数组在哪里。生成的热图如下所示:
热图(抱歉没有足够的声望嵌入图片)
问题是单元格之间的细线。奇怪的是,它们并不是在每一个边缘。
任何人都知道如何摆脱这些线?
非常感谢
更新 1(完整的工作示例):
image = np.array([[1, 1, 2, 2], [3, 3, 3, 3], [4, 5, 4, 5], [6, 6, 6, 6]])
ax = sns.heatmap(image, cmap="rocket_r", linewidths=0.0)
ax.collections[0].set_alpha(0.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)
结果是这个热图:

在这里您可以看到每列之间都有细线,但第一行和第二行之间没有任何线。
我刚刚将 CanaryLeak 添加到我的项目中,以查看我的应用程序中是否存在任何内存泄漏,并注意到,由于 Snackbar,我的片段中确实存在泄漏。
我正在创建一个 SnackbaronCreateView并将其设置为nullin onDestroyView。但是,每次旋转屏幕时都会出现内存泄漏。
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup
container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_backend, container,
false);
Activity parentActivity = getActivity();
if (parentActivity != null) {
mConnectSnackbar =
Snackbar.make(parentActivity.findViewById(R.id.nav_host_fragment),
"Connect", Snackbar.LENGTH_INDEFINITE);
mConnectSnackbar.setAction(getString(R.string.connect), v ->
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)));
}
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
mConnectSnackbar.setAction("Connect", null);
mConnectSnackbar.dismiss();
mConnectSnackbar = null;
}
Run Code Online (Sandbox Code Playgroud)
当我清除对操作和 Snackbar 本身的引用时,不应该有任何内存泄漏的原因。但是我不知道可能是什么原因,来自 Canary Leak 的 Heap Dump 也无济于事。由于对 nav_host_fragment 的引用,我怀疑这可能是我,但我不知道它是否属实以及如何修复它。
非常感谢您的帮助。
添加了泄漏跟踪并删除了 hprof …
I\xc2\xb4m 使用 Android 导航组件创建带有导航抽屉的应用程序。但是,如果通过导航抽屉更改当前片段,然后按回,应用程序始终返回到导航图的起始片段。\n我只能找到如何在使用导航组件时从 Backstack 中删除片段的解决方案,但无法找到如何添加它们。
\n\n我\xc2\xb4ve 已经将其他片段添加为NavController 的AppBarConfiguration 中的根片段,但这不会改变\xc2\xb4t 的行为。\n在应用程序的其他部分使用标准时,navController.navigate()片段会正确添加到 Backstack 中。仅当我从导航抽屉切换片段时,它们才会添加到 Backstack 中。
我\xc2\xb4ve 还尝试更改片段之间的操作(例如popUpTo和popUpToInclusive),但似乎导航组件\xc2\xb4t 没有使用这些,因为它\xc2\xb4t 不会更改任何内容。
MainActivity.java
\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstaceState);\n setContentView(R.layout.activity_main);\n\n DrawerLayout drawer_layout = findViewById(R.id.drawer_layout);\n NavigationView navigationView = findViewById(R.id.nav_view);\n\n navController = Navigation.findNavController(this, R.id.nav_host_fragment);\n\n appBarConfiguration = new AppBarConfiguration.Builder(R.id.homeFragment, R.id.Fragment1,\n R.id.Fragment2, R.id.Fragment3).setDrawerLayout(drawer_layout).build();\n\n NavigationUI.setupWithNavController(navigationView, navController);\n NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);\n\n Toolbar toolbar = findViewById(R.id.toolbar);\n setSupportActionBar(toolbar);\n}\n\n@Override\npublic boolean onSupportNavigateUp() {\n navController = Navigation.findNavController(this, R.id.nav_host_fragment);\n return NavigationUI.navigateUp(navController, appBarConfiguration) || super.onSupportNavigateUp();\n}\nRun Code Online (Sandbox Code Playgroud)\n\nnav_graph.xml …
android android-fragments navigation-drawer android-jetpack android-architecture-navigation
android ×5
leakcanary ×2
memory-leaks ×2
menu ×2
android-architecture-navigation ×1
google-maps ×1
heatmap ×1
java ×1
python ×1
seaborn ×1
searchview ×1