【问题标题】:Material design fixed tabs without toolbar没有工具栏的材料设计固定选项卡
【发布时间】:2015-05-02 14:09:02
【问题描述】:

我在找出代码中的“错误”时遇到了一个小问题。我不确定它是否是一个错误。但是,如图 1 所示,固定拉片的位置在窗帘抽屉的后面。我找不到/理解为什么会这样。我遵循了几个教程,他们似乎没有同样的问题。 我试图用谷歌搜索它,但我找不到类似的问题。有没有人经历过类似的事情?

在 android studio 中,设计布局似乎是正确的,但在编译时却不是。

我正在使用 neokree 库,因此我可以在选择选项卡时使用图标和涟漪效果。我尝试使用谷歌的标签布局link here,但是一旦我尝试删除操作栏并应用图标,就会发生同样的问题。

谢谢!

activity_main

<?xml version="1.0" encoding="utf-8" ?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<it.neokree.materialtabs.MaterialTabHost
    android:id="@+id/materialTabHost"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    app:iconColor="@color/iconColor"
    app:primaryColor="@color/primaryColor"
    app:accentColor="@color/accentColor"
    app:hasIcons="true"/>

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="0px"
    android:layout_weight="1"/>


</LinearLayout>

styles.xml

<resources>  
    <style name="AppTheme" parent="AppTheme.Base"></style>

    <style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">

        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryColorDark</item>
        <item name="colorAccent">@color/accentColor</item>
        <item name="colorControlHighlight">@color/colorHighlight</item>

    </style>
</resources>

styles.xml v21

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Base application theme. -->

    <!--Using same style as in default style.xml file-->
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="android:colorPrimary">@color/primaryColor</item>
        <item name="android:colorPrimaryDark">@color/primaryColorDark</item>
        <item name="android:colorAccent">@color/accentColor</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:colorControlHighlight">@color/colorHighlight</item>
    </style>

</resources>

主活动

import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ImageSpan;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import it.neokree.materialtabs.MaterialTab;
import it.neokree.materialtabs.MaterialTabHost;
import it.neokree.materialtabs.MaterialTabListener;


public class MainActivity extends ActionBarActivity implements MaterialTabListener
{

    private Toolbar toolbar;
    private ViewPager mPager;
    private SlidingTabLayout mTabs;

    private MaterialTabHost tabHost;
    private ViewPager viewPager;


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tabHost = (MaterialTabHost) findViewById(R.id.materialTabHost);
        viewPager = (ViewPager) findViewById(R.id.viewPager);

        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
        viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                tabHost.setSelectedNavigationItem(position);

            }
        });
        for (int i = 0; i < adapter.getCount(); i++) {
            tabHost.addTab(
                    tabHost.newTab()
                            .setIcon(adapter.getIcon(i))
                            .setTabListener(this));
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings)
        {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onTabSelected(MaterialTab materialTab) {
        viewPager.setCurrentItem(materialTab.getPosition());
    }

    @Override
    public void onTabReselected(MaterialTab materialTab) {

    }

    @Override
    public void onTabUnselected(MaterialTab materialTab) {

    }

    class ViewPagerAdapter extends FragmentStatePagerAdapter
    {

        int icons[] = {R.drawable.ic_home,
                R.drawable.ic_graph,
                R.drawable.ic_bell_mid,
                R.drawable.ic_settings};

        //String[] tabText = getResources().getStringArray(R.array.tabs);

        public ViewPagerAdapter(FragmentManager fm)
        {
            super(fm);
            //tabText = getResources().getStringArray(R.array.tabs);
        }

        @Override
        public Fragment getItem(int position)
        {
            MyFragment myFragment = MyFragment.getInstance(position);
            return myFragment;
        }

        //Attaching an image to a (spannable) string so we can show the image instead of text.
        @Override
        public CharSequence getPageTitle(int position){
            /*Drawable drawable = getResources().getDrawable(icons[position]);
            //icon bounds/size
            drawable.setBounds(0,0,96,96);
            ImageSpan imageSpan = new ImageSpan(drawable);
            SpannableString spannableString = new SpannableString(" ");
            spannableString.setSpan(imageSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            return spannableString;*/
            return getResources().getStringArray(R.array.tabs)[position];
        }

        @Override
        public int getCount()
        {
            return 4;
        }

        private Drawable getIcon(int position)
        {
            return getResources().getDrawable(icons[position]);
        }
    }
}

【问题讨论】:

    标签: tabs android-actionbar toolbar material-design


    【解决方案1】:

    在无意中阅读了有关制作简单材料设计选项卡的 youtube 教程后,我创建了一个新项目,并开始将我在 youtube 中找到的项目与我的旧项目结合起来。最终,我发现样式文件中的以下代码行是问题的原因。

    <item name="android:windowTranslucentStatus">true</item> 
    

    这似乎是我为测试添加的东西,后来忘记删除了。

    【讨论】:

      【解决方案2】:

      尝试添加一个没有操作栏主题的工具栏..

      为此,您必须创建一个名为 tool_bar.xml 的新 xml 文件并将以下代码粘贴到其中:

      <?xml version="1.0" encoding="utf-8"?>
      <android.support.v7.widget.Toolbar
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:background="@color/ColorPrimary"
         android:elevation="2dp"
         android:theme="@style/Theme.AppCompat.NoActionBar"
         xmlns:android="http://schemas.android.com/apk/res/android" />
      

      然后您将其添加到您的 activity_main.xml 文件中:

      <include
          android:id="@+id/tool_bar"
          layout="@layout/tool_bar"
          android:layout_height="wrap_content"
          android:layout_width="match_parent"
          />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-02
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-09
        • 2020-11-10
        相关资源
        最近更新 更多