Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过android java的可切换选项卡更改活动布局_Java_Android_Android Layout_Tabs - Fatal编程技术网

如何通过android java的可切换选项卡更改活动布局

如何通过android java的可切换选项卡更改活动布局,java,android,android-layout,tabs,Java,Android,Android Layout,Tabs,在我的android应用程序中,我有两个.xaml布局,如activity_1和activity_2,我想通过两个可切换选项卡更改这些布局的活动,因为在这之后我想添加更多选项卡:下面是我的活动: package com.example.hakslogin; import android.support.v4.view.PagerAdapter; import android.support.v4.view.PagerTitleStrip; import android.support.v4.vi

在我的android应用程序中,我有两个
.xaml
布局,如
activity_1
activity_2
,我想通过两个可切换选项卡更改这些布局的活动,因为在这之后我想添加更多选项卡:下面是我的活动:

package com.example.hakslogin;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.app.ActionBar;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Color;
import android.view.View.OnClickListener;

public class LoginSuccess extends ActionBarActivity {

    static final String LOG_TAG = "SlidingTabsBasicFragment";
    private SlidingTabLayout mSlidingTabLayout;
    private ViewPager mViewPager;

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

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

        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mViewPager.setAdapter(new SamplePagerAdapter());
        mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
        mSlidingTabLayout.setViewPager(mViewPager);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.login_success, 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();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

       class SamplePagerAdapter extends PagerAdapter {

            /**
             * @return the number of pages to display
             */
            @Override
           /* public int getCount() {  //I am not using this method
                return 5;
            }*/

            /**
             * @return true if the value returned from
             *         {@link #instantiateItem(ViewGroup, int)} is the same object
             *         as the {@link View} added to the {@link ViewPager}.
             */
            @Override
            public boolean isViewFromObject(View view, Object o) {
                return o == view;
            }

            @Override
            /*public CharSequence getPageTitle(int position) { //I am not using this //method because I am giving name of tabs in SlidingTabLayout.java class
                return pageTitle + " " + (position + 1);  
            }*/ 

            // END_INCLUDE (pageradapter_getpagetitle)

            /**
             * Instantiate the {@link View} which should be displayed at
             * {@code position}. Here we inflate a layout from the apps resources
             * and then change the text view to signify the position.
             */
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                // Inflate a new layout from our resources
                View view  = getLayoutInflater().inflate(R.layout.activity_login_success,
                            container, false);
                    container.addView(view);

                    // Retrieve a TextView from the inflated View, and update it's text
                    // --comment by me
                    //TextView title = (TextView) view.findViewById(R.id.item_title);
                    //title.setText(String.valueOf(position + 1));

                    Log.i(LOG_TAG, "instantiateItem() [position: " + position + "]");

                return view;
            }

            /**
             * Destroy the item from the {@link ViewPager}. In our case this is
             * simply removing the {@link View}.
             */
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView((View) object);
                Log.i(LOG_TAG, "destroyItem() [position: " + position + "]");
            }

        }
}
我在我的另一项活动中使用了上述相同的代码,如下所示:

package com.example.hakslogin;

import com.example.android.common.view.SlidingTabLayout;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TableRow;
import android.widget.TextView;

public class AddChildActivity extends ActionBarActivity {

    static final String LOG_TAG = "SlidingTabsBasicFragment";
    private SlidingTabLayout mSlidingTabLayout;
    private ViewPager mViewPager;

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

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

        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mViewPager.setAdapter(new SamplePagerAdapter());
        mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
        mSlidingTabLayout.setViewPager(mViewPager);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.add_child, 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();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    class SamplePagerAdapter extends PagerAdapter {

        /*@Override
        public int getCount() {
            return 5;
        }*/

        @Override
        public boolean isViewFromObject(View view, Object o) {
            return o == view;
        }

        /*@Override
        public CharSequence getPageTitle(int position) {
            return pageTitle + " " + (position + 1);
        }*/

        // END_INCLUDE (pageradapter_getpagetitle)

        /**
         * Instantiate the {@link View} which should be displayed at
         * {@code position}. Here we inflate a layout from the apps resources
         * and then change the text view to signify the position.
         */
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // Inflate a new layout from our resources
            View view = getLayoutInflater().inflate(R.layout.activity_add_child,
                        container, false);
                container.addView(view);

                // Retrieve a TextView from the inflated View, and update it's text
                // --comment by me
                //TextView title = (TextView) view.findViewById(R.id.item_title);
                //title.setText(String.valueOf(position + 1));

                Log.i(LOG_TAG, "instantiateItem() [position: " + position + "]");
                return view;
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
            Log.i(LOG_TAG, "destroyItem() [position: " + position + "]");
        }

    }
}
下面是
slidengtablayout.java
class:

package com.example.android.common.view;


import com.example.hakslogin.LoginSuccess;

import android.content.Context;
import android.graphics.Typeface;
import android.os.Build;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.HorizontalScrollView;
import android.widget.TextView;

public class SlidingTabLayout extends HorizontalScrollView {

    /**
     * Allows complete control over the colors drawn in the tab layout. Set with
     * {@link #setCustomTabColorizer(TabColorizer)}.
     */
    public interface TabColorizer {

        /**
         * @return return the color of the indicator used when {@code position} is selected.
         */
        int getIndicatorColor(int position);

        /**
         * @return return the color of the divider drawn to the right of {@code position}.
         */
        int getDividerColor(int position);

    }

    private static final int TITLE_OFFSET_DIPS = 24;
    private static final int TAB_VIEW_PADDING_DIPS = 16;
    private static final int TAB_VIEW_TEXT_SIZE_SP = 12;

    private int mTitleOffset;

    private int mTabViewLayoutId;
    private int mTabViewTextViewId;

    private ViewPager mViewPager;
    private ViewPager.OnPageChangeListener mViewPagerPageChangeListener;
    String value = "";
    private final SlidingTabStrip mTabStrip;
   // public  SlidingTabLayout() {

        // TODO Auto-generated constructor stub

    //}

    public SlidingTabLayout(Context context) {
        this(context, null);
    }

    public SlidingTabLayout(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        // Disable the Scroll Bar
        setHorizontalScrollBarEnabled(false);
        // Make sure that the Tab Strips fills this View
        setFillViewport(true);

        mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density);

        mTabStrip = new SlidingTabStrip(context);
        addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    }

    /**
     * Set the custom {@link TabColorizer} to be used.
     *
     * If you only require simple custmisation then you can use
     * {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)} to achieve
     * similar effects.
     */
    public void setCustomTabColorizer(TabColorizer tabColorizer) {
        mTabStrip.setCustomTabColorizer(tabColorizer);
    }

    /**
     * Sets the colors to be used for indicating the selected tab. These colors are treated as a
     * circular array. Providing one color will mean that all tabs are indicated with the same color.
     */
    public void setSelectedIndicatorColors(int... colors) {
        mTabStrip.setSelectedIndicatorColors(colors);
    }

    /**
     * Sets the colors to be used for tab dividers. These colors are treated as a circular array.
     * Providing one color will mean that all tabs are indicated with the same color.
     */
    public void setDividerColors(int... colors) {
        mTabStrip.setDividerColors(colors);
    }

    /**
     * Set the {@link ViewPager.OnPageChangeListener}. When using {@link SlidingTabLayout} you are
     * required to set any {@link ViewPager.OnPageChangeListener} through this method. This is so
     * that the layout can update it's scroll position correctly.
     *
     * @see ViewPager#setOnPageChangeListener(ViewPager.OnPageChangeListener)
     */
    public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) {
        mViewPagerPageChangeListener = listener;
    }

    /**
     * Set the custom layout to be inflated for the tab views.
     *
     * @param layoutResId Layout id to be inflated
     * @param textViewId id of the {@link TextView} in the inflated view
     */
    public void setCustomTabView(int layoutResId, int textViewId) {
        mTabViewLayoutId = layoutResId;
        mTabViewTextViewId = textViewId;
    }

    /**
     * Sets the associated view pager. Note that the assumption here is that the pager content
     * (number of tabs and tab titles) does not change after this call has been made.
     */
    public void setViewPager(ViewPager viewPager) {
        mTabStrip.removeAllViews();

        mViewPager = viewPager;
        if (viewPager != null) {
            viewPager.setOnPageChangeListener(new InternalViewPagerListener());
            populateTabStrip();
        }
    }

    /**
     * Create a default view to be used for tabs. This is called if a custom tab view is not set via
     * {@link #setCustomTabView(int, int)}.
     */

    protected TextView createDefaultTabView(Context context) {
        TextView textView = new TextView(context);
        textView.setGravity(Gravity.CENTER);
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP);
        textView.setTypeface(Typeface.DEFAULT_BOLD);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            // If we're running on Honeycomb or newer, then we can use the Theme's
            // selectableItemBackground to ensure that the View has a pressed state
            TypedValue outValue = new TypedValue();
            getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
                    outValue, true);
            textView.setBackgroundResource(outValue.resourceId);
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style
            //textView.setAllCaps(true);
            //textView.setAllCaps(true);
        }

        int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
        textView.setPadding(padding, padding, padding, padding);

        return textView;
    }

    String names[] = {"Home","Add Child"};//,"Add Item", "Questions", "Answer"};
    int len = names.length;
    private void populateTabStrip() {
        final PagerAdapter adapter = mViewPager.getAdapter();
        final View.OnClickListener tabClickListener = new TabClickListener();

        for (int i = 0; i < names.length ; i++) {// i++) {;adapter.getCount()
            View tabView = null;
            TextView tabTitleView = null;

            if (mTabViewLayoutId != 0) {
                // If there is a custom tab view layout id set, try and inflate it
                tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
                        false);
                tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
            }

            if (tabView == null) {
                tabView = createDefaultTabView(getContext());
            }

            if (tabTitleView == null && TextView.class.isInstance(tabView)) {
                tabTitleView = (TextView) tabView;
            }
            LoginSuccess.pageTitle = names[i].toString();
            tabTitleView.setText(names[i].toString());//adapter.getPageTitle(i)
            tabView.setOnClickListener(tabClickListener);

            mTabStrip.addView(tabView);
        }
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();

        if (mViewPager != null) {
            scrollToTab(mViewPager.getCurrentItem(), 0);
        }
    }

    private void scrollToTab(int tabIndex, int positionOffset) {
        final int tabStripChildCount = mTabStrip.getChildCount();
        if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) {
            return;
        }

        View selectedChild = mTabStrip.getChildAt(tabIndex);
        if (selectedChild != null) {
            int targetScrollX = selectedChild.getLeft() + positionOffset;

            if (tabIndex > 0 || positionOffset > 0) {
                // If we're not at the first child and are mid-scroll, make sure we obey the offset
                targetScrollX -= mTitleOffset;
            }

            scrollTo(targetScrollX, 0);
        }
    }

    private class InternalViewPagerListener implements ViewPager.OnPageChangeListener {
        private int mScrollState;

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            int tabStripChildCount = mTabStrip.getChildCount();
            if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
                return;
            }

            mTabStrip.onViewPagerPageChanged(position, positionOffset);

            View selectedTitle = mTabStrip.getChildAt(position);
            int extraOffset = (selectedTitle != null)
                    ? (int) (positionOffset * selectedTitle.getWidth())
                    : 0;
            scrollToTab(position, extraOffset);

            if (mViewPagerPageChangeListener != null) {
                mViewPagerPageChangeListener.onPageScrolled(position, positionOffset,
                        positionOffsetPixels);
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            mScrollState = state;

            if (mViewPagerPageChangeListener != null) {
                mViewPagerPageChangeListener.onPageScrollStateChanged(state);
            }
        }

        @Override
        public void onPageSelected(int position) {
            if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
                mTabStrip.onViewPagerPageChanged(position, 0f);
                scrollToTab(position, 0);
            }

            if (mViewPagerPageChangeListener != null) {
                mViewPagerPageChangeListener.onPageSelected(position);
            }
        }

    }

    private class TabClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            for (int i = 0; i < mTabStrip.getChildCount(); i++) {
                if (v == mTabStrip.getChildAt(i)) {
                    mViewPager.setCurrentItem(i);
                    return;
                }
            }
        }
    }

}
package com.example.android.common.view;
导入com.example.hakslogin.loginsucess;
导入android.content.Context;
导入android.graphics.Typeface;
导入android.os.Build;
导入android.support.v4.view.PagerAdapter;
导入android.support.v4.view.ViewPager;
导入android.util.AttributeSet;
导入android.util.TypedValue;
导入android.view.Gravity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.widget.HorizontalScrollView;
导入android.widget.TextView;
公共类SlidingTableOut扩展了水平滚动视图{
/**
*允许完全控制选项卡布局中绘制的颜色。设置为
*{@link#setCustomTabColorizer(TabColorizer)}。
*/
公共接口选项卡着色程序{
/**
*@return选择{@code position}时使用的指示器的颜色。
*/
int getIndicatorColor(int位置);
/**
*@return返回{@code position}右侧绘制的分隔符的颜色。
*/
int getDividerColor(int位置);
}
私有静态最终整数标题_偏移_倾斜=24;
私有静态最终整数选项卡\视图\填充\倾角=16;
私有静态最终整数选项卡\视图\文本\大小\ SP=12;
私有整数mTitleOffset;
私有内部mTabViewLayoutId;
私有int mTabViewTextViewId;
私有视图寻呼机mViewPager;
私有ViewPager.OnPageChangeListener mViewPagerPageChangeListener;
字符串值=”;
私人最终幻灯片Abstrip mTabStrip;
//公共幻灯片布局(){
//TODO自动生成的构造函数存根
//}
公共幻灯片布局(上下文){
这个(上下文,空);
}
公共幻灯片布局(上下文、属性集属性){
这(上下文,属性,0);
}
公共幻灯片布局(上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
//禁用滚动条
setHorizontalScrollBarEnabled(假);
//确保选项卡条填充此视图
setFillViewport(true);
mTitleOffset=(int)(TITLE_OFFSET_DIPS*getResources().getDisplayMetrics().density);
mTabStrip=新的SlidengAbstrip(上下文);
addView(mTabStrip、LayoutParams.MATCH\u父级、LayoutParams.WRAP\u内容);
}
/**
*设置要使用的自定义{@link TabColorizer}。
*
*如果您只需要简单的保管,那么您可以使用
*{@link#setSelectedIndicatorColors(int..)}和{@link#setDividerColors(int..)}以实现
*类似的效果。
*/
公共无效设置CustomTabColorizer(TabColorizer TabColorizer){
mTabStrip.setCustomTabColorizer(tabColorizer);
}
/**
*设置用于指示所选选项卡的颜色。这些颜色被视为
*圆形数组。提供一种颜色意味着所有选项卡都用相同的颜色表示。
*/
公共无效设置选定的指示颜色(整数…颜色){
mTabStrip.SetSelectedIndicator颜色(颜色);
}
/**
*设置用于制表符分隔符的颜色。这些颜色被视为圆形数组。
*提供一种颜色意味着所有选项卡都用相同的颜色表示。
*/
公共无效设置分割颜色(内部…颜色){
mTabStrip.SetDividerColor(颜色);
}
/**
*设置{@link ViewPager.OnPageChangeListener}。使用{@link SlidingTabLayout}时,您需要
*需要通过此方法设置任何{@link ViewPager.OnPageChangeListener}。这样
*布局可以正确更新其滚动位置。
*
*@see ViewPager#setOnPageChangeListener(ViewPager.OnPageChangeListener)
*/
public void setOnPageChangeListener(ViewPager.OnPageChangeListener侦听器){
mViewPagerPageChangeListener=监听器;
}
/**
*为选项卡视图设置要充气的自定义布局。
*
*@param layoutResId布局id要膨胀
*膨胀视图中{@link TextView}的@param TextView id
*/
public void setCustomTabView(int-layoutResId,int-textViewId){
mTabViewLayoutId=layoutResId;
mTabViewTextViewId=textViewId;
}
/**
*设置关联的查看寻呼机。请注意,此处的假设是寻呼机内容
*(选项卡数量和选项卡标题)在进行此调用后不会更改。
*/
公共无效设置ViewPager(ViewPager ViewPager){
mTabStrip.removeallview();
mViewPager=查看寻呼机;
if(viewPager!=null){
setOnPageChangeListener(新的InternalViewPagerListener());
populateTabStrip();
}
}
/**
*创建用于选项卡的默认视图。如果未通过设置自定义选项卡视图,则调用此操作
*{@link#setCustomTabView(int,int)}。
*/
受保护的TextView createDefaultTabView(上下文){
TextView TextView=新的TextView(上下文);
textView.setGravity(Gravity.CENTER);
textView.setTextSize(TypedValue.COMPLEX\u UNIT\u SP,TAB\u VIEW\u TEXT\u SIZE\u SP);
textView.setTypeface(Typeface.DEFAULT_BOLD);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB){
//如果我们运行的是蜂巢或更新版本,那么我们可以使用主题的
//selectableItemBackground可确保视图处于按下状态
TypedValue outValue=新的TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackgrou