【问题标题】:Changing Text visibility according to tab and setting background color of tab根据选项卡更改文本可见性并设置选项卡的背景颜色
【发布时间】:2017-01-05 15:42:24
【问题描述】:

我使用了自定义工具栏。在自定义工具栏中,我确实在选项卡上方有一个 textView。现在我想将第二个和第三个选项卡的 TextView 的可见性设置为关闭。这是我的布局图像

In this image when the Ongoing tabs is selected the textfield above the tab(The ongoing survey closes on.........GMT) should be visible while for rest of the tabs the textview visibility should be gone.How can I这样做?

下一个问题是我已将整个布局的背景设置为在父布局中使用背景图像。但是我在选项卡后面得到了默认背景。我想要的是删除默认选项卡背景颜色并获取父级的背景.如何做到这一点?

这是我的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:background="@drawable/innerpg_bg"
    android:layout_height="match_parent">

    <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="wrap_content"
            android:background="#42474b"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
            <ImageView
                android:id="@+id/toolbarlogo"
                android:src="@mipmap/toolbarlogo"
                android:layout_width="wrap_content"
                android:layout_marginRight="200dp"
                android:layout_height="46dp"
                 />
        </android.support.v7.widget.Toolbar>

        <TextView
            android:id="@+id/deadline"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="#494e51"
            android:gravity="center_vertical"
            android:paddingLeft="40dp"
            android:textSize="10dp"
            android:textColor="#fff"
            android:text="The Ongoing survey closes on Dec 31,2016 at 2:00pm GMT"
            />
        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="fill"
            app:tabMode="fixed" />

    </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" />
</android.support.design.widget.CoordinatorLayout>

这是我的java类

package com.example.user.timothysurvey.activity;

import android.app.Dialog;
import android.content.Intent;
import android.graphics.Color;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.user.timothysurvey.R;

import java.util.ArrayList;
import java.util.List;

import fragment.Ongoing;
import fragment.Result;
import fragment.Upcomming;

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    TextView deadLine;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private int[] tabIcons = {
            R.mipmap.ongoing,
            R.mipmap.upcoming,
            R.mipmap.results
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        deadLine= (TextView) findViewById(R.id.deadline);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        toolbar.setPadding(0, getStatusBarHeight(), 0, 0);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setSelectedTabIndicatorHeight(0);

        tabLayout.setupWithViewPager(viewPager);
        setupTabIcons();


    }

    private void setupTabIcons() {
        LayoutInflater inflater = LayoutInflater.from(this);

        View view1 = inflater.inflate(R.layout.custom_tabs, null, false);
        ((TextView) view1.findViewById(R.id.text)).setText("Ongoing");
        ((ImageView) view1.findViewById(R.id.image)).setImageResource(tabIcons[0]);


        View view2 = inflater.inflate(R.layout.custom_tabs, null, false);
        ((TextView) view2.findViewById(R.id.text)).setText("Upcomming");
        ((ImageView) view2.findViewById(R.id.image)).setImageResource(tabIcons[1]);

        View view3 = inflater.inflate(R.layout.custom_tabs, null, false);
        ((TextView) view3.findViewById(R.id.text)).setText("Results");
        ((ImageView) view3.findViewById(R.id.image)).setImageResource(tabIcons[2]);

        tabLayout.getTabAt(0).setCustomView(view1);
        tabLayout.getTabAt(1).setCustomView(view2);
        tabLayout.getTabAt(2).setCustomView(view3);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(new Ongoing(), "Ongoing");
        adapter.addFrag(new Upcomming(), "Upcomming");
        adapter.addFrag(new Result(), "Result");
        viewPager.setAdapter(adapter);
    }





    public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.settings:
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

【问题讨论】:

    标签: android tabs


    【解决方案1】:

    为 ViewPager 实现 OnPageChangeListener

    public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{
    

    覆盖 onPageSelected 方法

    @Override
    public void onPageSelected(int position) {
    
        //This method will be invoked when a new page becomes selected.set your visiblity here with respect to tab
        if( position == 0){
            deadLine.setVisibility(View.VISIBLE);
        }
        else if(position == 1){
            deadLine.setVisibility(View.GONE);
        }
        else if(position == 2){
            deadLine.setVisibility(View.GONE);
        }
    
    }
    
    @Override
    public void onPageScrollStateChanged(int state) {
    
    }
    
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
    }
    

    在标签后面获取默认背景。为 AppBarLayout 添加透明背景。

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#00000000"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多