我的问题是如何将新的android材质设计TabLayout设置在屏幕的底部,有点像Instagram的底部工具栏.
如果您从未见过Instagram的UI,请点击它的截图:
.如果有更好的方法来解决这个问题,请随时在此处发布(如果可能的话,请附上代码示例),我将非常感激.
这是我的代码:activity_main.xml
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
Run Code Online (Sandbox Code Playgroud)
我已经尝试过Stack Overflow社区建议的许多方法和解决方法,但似乎没有一个可以在android中使用这个新的选项卡实现.我知道这个UI设计不符合Android设计指南,所以请不要评论它.这个UI设计对我的应用程序的用户体验至关重要,我希望得到答案.谢谢!
我目前在main.xml中有一个DrawerLayout.有一个工具栏包装在AppBarLayout中,然后是一个简单的LinearLayout来交换片段.
我导航到的一个片段,我希望它包含一个用于ViewPager片段的TabLayout.目前,我在片段的布局文件中都有这两个,但这会导致工具栏和TabLayout之间出现阴影,这是我不想要的.我也不想使用setElevation(),因为它不适用于pre-Lollipop设备.
一个可能的解决方案是从我的片段中膨胀AppBarLayout,以便它同时包含工具栏+标签.但是,我不确定如何做到这一点,所以任何帮助将不胜感激.
这是我的main.xml文件:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.lumivote.lumivote.ui.MainActivity">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbarlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:id="@+id/flContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header"
app:itemIconTint="#333"
app:itemTextColor="#333"
app:menu="@menu/navigation_drawer_items" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
这是我的片段的xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.alexdao.democracy.ui.candidate_tab.CandidateListFragment">
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/myPrimaryColor"
app:tabMode="fixed"
app:tabGravity="fill"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) android android-layout android-fragments android-toolbar android-tablayout
我的HomeActivity扩展了使用2个选项卡的AppCompatActivity.
public class HomeActivity extends AppCompatActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private TabLayout tabLayout;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
...
Run Code Online (Sandbox Code Playgroud)
如何收听标签更改事件?如果我需要添加更多代码以便清楚,请告诉我.
我使用的是android.support.design.widget.TabLayout.它有两个选项卡,如果用户选择第二个选项卡在特定条件下,我希望用户重定向到第一个选项卡,并禁止他转到sencond选项卡,直到条件匹配.为了实现这一点,我试过,
tabLayout.getTabAt(0).select();
Run Code Online (Sandbox Code Playgroud)
但它没有重新选择第一个标签
无法解析符号TabLayout?如何清除此错误?请帮我.我已经导入了import android.support.design.widget.TabLayout;
android importerror android-fragments android-studio android-tablayout
有嵌套片段TabLayout和ViewPager.每个片段里面都有listview,所以他们可以一起调用,现在我遇到了app处理速度慢的问题.我尝试过一些像凌空图书馆这样的解决方案,但它对我不起作用.更多我发布我的代码所以请指导我做到最好.
MainTabFragment.java
public class MainTabFragment extends Fragment {
public static int position_child_tab = 0, three_childs_tab_position = 0;
static int count = -1;
int position_tab = 0;
Bundle args;
MyTabLayout myTabLayout;
public MainTabFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment …Run Code Online (Sandbox Code Playgroud) performance android android-fragments android-viewpager android-tablayout
我添加了新的Toolbar,Tablayout并Viewpager在我的Android应用程序中.我为我的3个标签提供了碎片,它的工作正常.但问题是,当我向上滚动我的工具栏时,不会隐藏.我希望当我滚动我的片段时它应该隐藏.还有一件事,我在片段中使用Webview.我的代码如下.
MainActivity.Java
public class MainActivity extends AppCompatActivity {
TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupToolbar();
setupTablayout();
}
private void setupToolbar() {
// TODO Auto-generated method stub
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbarsdfs);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);}
}
private void setupTablayout() {
// TODO Auto-generated method stub
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PagerAdapter
(getSupportFragmentManager(), …Run Code Online (Sandbox Code Playgroud) 我对Android开发很新.所以忍受我.
我一直在尝试将com.android.support:design:23.1.0中的图标和文本对齐一天.
显然,在com.android.support:design:23.1.0他们已经改变了默认的图标位置,顶部和文字在底部.
以前在com.android.support:design:23.0.1默认在同一行图标左边和文本图标
所以这里有一个简单的方法来解决它(虽然它可能有缺点,idk tbh):
change the version in your app's build.gradle. ex: 23.1.0 to 23.0.1 and build.
Run Code Online (Sandbox Code Playgroud)
还有一种更好的方法(这样你也可以在左,右,上,下对齐图标):
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"/>
Run Code Online (Sandbox Code Playgroud)
2.在你的活动java中
TextView newTab = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null);
newTab.setText("tab1"); //tab label txt
newTab.setCompoundDrawablesWithIntrinsicBounds(your_drawable_icon_here, 0, 0, 0);
tabLayout.getTabAt(tab_index_here_).setCustomView(newTab);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经实现了使图标显示在任何一侧,如下所示:
PS:setCompoundDrawablesWithIntrinsicBounds函数参数是4个侧面图标,如下所示:
setCompoundDrawablesWithIntrinsicBounds(leftDrawable, topDrawable, rightDrawable, bottomDrawable)
Run Code Online (Sandbox Code Playgroud) android android-support-library android-support-design android-tablayout
我目前正在尝试新的Android支持设计库中的各种新组件.我NavigationView在my中实现了一个MainActivity.java,它使用FragmentManager在Navigation抽屉中的项目之间导航:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content, mTabLayoutFragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit();
Run Code Online (Sandbox Code Playgroud)
我TabLayout在其中一个片段中使用了一个.这是片段的布局:
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"/>
</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)
它背后的Java代码:
import android.os.Bundle;
import android.support.design.widget.*;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class TabLayoutFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflatedView = inflater.inflate(R.layout.fragment_tablayout, container, false);
TabLayout tabLayout = (TabLayout) …Run Code Online (Sandbox Code Playgroud) android android-fragments android-support-design android-tablayout