bringToFront()在棒棒糖中不起作用

时间:2017-02-07 12:03:46

标签: android android-view android-api-levels

我在我的应用中使用了搜索小部件。我想把它带到一切之前,我做了它并在真实设备上进行了测试。它工作正常。但是当我在一个棒棒糖设备上进行测试时,它并没有起作用。然后我才知道bringToFront()在棒棒糖中运作不佳。所以我可以使用setElevation()或其他东西(也许是setZ)。但是,我想在从API 17到最新版本的每个Android设备上工作。我该怎么做?

我正在粘贴下面的代码。

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        MaterialSearchView searchView = (MaterialSearchView) view.findViewById(R.id.search_view); //Search experiment
        inflater.inflate(R.menu.toolbar_menu, menu);
        super.onCreateOptionsMenu(menu, inflater);
        MenuItem item = menu.findItem(R.id.search_top);
        searchView.setMenuItem(item);
        searchView.bringToFront();
}

2 个答案:

答案 0 :(得分:1)

检查搜索视图的高程。 要设置高程,请转到XML文件并在searchView集android:elevation="2dp"内,如果不起作用,可能会更高。 问题是,隐藏或重叠搜索视图的元素具有比搜索视图更高的高度。您可以将重叠元素的高程设置为0dp。例如:android:elevation="0dp"。并且bringToFront()不仅适用于Lollipop。这有望解决问题

答案 1 :(得分:0)

我已经弄明白了

if (android.os.Build.VERSION.SDK_INT >= 21) //Lollipop
{
    view.setZ(15);

    for (int i = 0; i < view.getParent().getChildCount(); i++)
    {
        if(view != view.getParent().getChildAt(i))
        {
            view.getParent().getChildAt(i).SetZ(5);
        }
    }
}

view.bringToFront();
for (int i = 0; i < view.getParent().getChildCount(); i++)
{
    view.getParent().getChildAt(i).invalidate();
}
view.getParent().requestLayout();
view.getParent().invalidate();

经过测试

  • 棉花糖

  • 杰利贝恩