小编Max*_*her的帖子

未应用自定义 SearchView 样式

我正在尝试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 menu android-layout searchview

7
推荐指数
1
解决办法
2758
查看次数

选项菜单显示缓慢

在我的 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 应用程序相比,它比平时花费的时间要长得多,而且感觉很笨拙。

有没有办法加快下拉菜单的创建/显示?

非常感谢!

android menu

5
推荐指数
1
解决办法
450
查看次数

谷歌地图 MapsView 泄漏

我已将 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)

java android google-maps memory-leaks leakcanary

5
推荐指数
1
解决办法
791
查看次数

Seaborn 热图没有单元格之间的线

我正在尝试使用带有透明颜色图的 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)

结果是这个热图:

这张热图

在这里您可以看到每列之间都有细线,但第一行和第二行之间没有任何线。

python heatmap seaborn

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

由于 Snackbar 导致内存泄漏

我刚刚将 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 的引用,我怀疑这可能是我,但我不知道它是否属实以及如何修复它。

非常感谢您的帮助。

编辑1:

添加了泄漏跟踪并删除了 hprof …

android memory-leaks leakcanary

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

将导航 UI 与导航抽屉一起使用时,片段不会添加到后台堆栈

I\xc2\xb4m 使用 Android 导航组件创建带有导航抽屉的应用程序。但是,如果通过导航抽屉更改当前片段,然后按回,应用程序始终返回到导航图的起始片段。\n我只能找到如何在使用导航组件时从 Backstack 中删除片段的解决方案,但无法找到如何添加它们。

\n\n

我\xc2\xb4ve 已经将其他片段添加为NavController 的AppBarConfiguration 中的根片段,但这不会改变\xc2\xb4t 的行为。\n在应用程序的其他部分使用标准时,navController.navigate()片段会正确添加到 Backstack 中。仅当我从导航抽屉切换片段时,它们才会添加到 Backstack 中。

\n\n

我\xc2\xb4ve 还尝试更改片段之间的操作(例如popUpTopopUpToInclusive),但似乎导航组件\xc2\xb4t 没有使用这些,因为它\xc2\xb4t 不会更改任何内容。

\n\n

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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

nav_graph.xml …

android android-fragments navigation-drawer android-jetpack android-architecture-navigation

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