• [android更新类的内容开发APP]四、项目布局的基本功能(继续)


    昨天,只拿到电脑,别说,眼泪

    http://joveth.github.io/funny/

    1.选项卡的滑动效果

    要知道。用这个选项卡就是想让它滑动起来,不然的话。我才不喜欢用它呢。

    在让他滑动之前,先来说一下上一张 的问题。话说。依照设计器下载下来的包,替换到 我们的 res之后,我发现,tabhost的选项颜色没有变,在我尝试 了各种方法之后,最终,我tm放弃了,好吧。正好 找到了这个滑动效果的demo,还有选项卡的颜色切换效果。
    话不多说 ,改进我们的东西吧。


    1.改动我们的 acitivity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TabHost
            android:id="@+id/tab_host"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
    
                <TabWidget
                    android:id="@android:id/tabs"
                    android:layout_width="match_parent"
                    android:layout_height="48dp"
                    android:background="@drawable/tab_widget_bg" />
    
                <android.support.v4.view.ViewPager
                    android:id="@+id/viewpager"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
    
                <!-- 隐藏 -->
    
                <FrameLayout
                    android:id="@android:id/tabcontent"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:visibility="gone" >
    
                    <fragment
                        android:id="@+id/fragment_image"
                        android:name="com.jov.germany.frame.ImageFrame"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" />
    
                    <fragment
                        android:id="@+id/fragment_text"
                        android:name="com.jov.germany.frame.TextFrame"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" />
    
                    <fragment
                        android:id="@+id/fragment_both"
                        android:name="com.jov.germany.frame.BothFrame"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" />
                </FrameLayout>
            </LinearLayout>
        </TabHost>
    
    </LinearLayout>

    这里面加入了viewpage。还有把FramLayout隐藏了

    当中的布局文件:
    res/color/tab_widget_text.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <!-- 标签页tab 文字切换颜色 -->
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        
        <item android:state_selected="true" android:color="@color/color_orange"/>
        
        <item android:color="#000"/>
        
    </selector>
    

    value/color.xml中加入:

    <color name="color_orange">#FF9224</color>

    为啥是橘黄,我……假设你不喜欢,百度HTML颜色代码表,找一个你 自己的最爱

    在来改动我们的 MainAcitivity.java


    package com.jov.germany;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TabHost;
    import android.widget.TabHost.OnTabChangeListener;
    import android.widget.TabHost.TabContentFactory;
    import android.widget.TabHost.TabSpec;
    import android.widget.TextView;
    
    public class MainActivity extends FragmentActivity {
    	public static final String PAGE1_ID = "page1";
    	public static final String PAGE2_ID = "page2";
    	public static final String PAGE3_ID = "page3";
    
    	private TabHost tabHost; // TabHost
    	private List<View> views; // ViewPager内的View对象集合
    	private FragmentManager manager; // Activity管理器
    	private ViewPager pager; // ViewPager
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		// 初始化资源
    		pager = (ViewPager) findViewById(R.id.viewpager);
    		tabHost = (TabHost) findViewById(R.id.tab_host);
    		manager = getSupportFragmentManager();
    		views = new ArrayList<View>();
    
    		views.add(manager.findFragmentById(R.id.fragment_image).getView());
    		views.add(manager.findFragmentById(R.id.fragment_text).getView());
    		views.add(manager.findFragmentById(R.id.fragment_both).getView());
    
    		// 管理tabHost開始
    		tabHost.setup();
    
    		// 传一个空的内容给TabHost,不能用上面两个fragment
    		TabContentFactory factory = new TabContentFactory() {
    			@Override
    			public View createTabContent(String tag) {
    				return new View(MainActivity.this);
    			}
    		};
    		// tab1
    		TabSpec tabSpec = tabHost.newTabSpec(PAGE1_ID);
    		tabSpec.setIndicator(createTabView(R.string.fragment_image_str));
    		tabSpec.setContent(factory);
    		tabHost.addTab(tabSpec);
    		// tab2
    		TabSpec tabSpec2 = tabHost.newTabSpec(PAGE2_ID);
    		tabSpec2.setIndicator(createTabView(R.string.fragment_text_str));
    		tabSpec2.setContent(factory);
    		tabHost.addTab(tabSpec2);
    		// tab3
    		TabSpec tabSpec3 = tabHost.newTabSpec(PAGE3_ID);
    		tabSpec3.setIndicator(createTabView(R.string.fragment_both_str));
    		tabSpec3.setContent(factory);
    		tabHost.addTab(tabSpec3);
    	
    		tabHost.setCurrentTab(0);
    		// 管理tabHost结束
    
    		// 设置监听器和适配器
    		pager.setAdapter(new PageAdapter());
    		pager.setOnPageChangeListener(new PageChangeListener());
    		tabHost.setOnTabChangedListener(new TabChangeListener());
    	}
    
    	/**
    	 * PageView Adapter
    	 * 
    	 * @author Administrator
    	 * 
    	 */
    	private class PageAdapter extends PagerAdapter {
    		@Override
    		public int getCount() {
    			return views.size();
    		}
    
    		@Override
    		public boolean isViewFromObject(View arg0, Object arg1) {
    			return arg0 == arg1;
    		}
    
    		@Override
    		public void destroyItem(ViewGroup view, int position, Object arg2) {
    			view.removeView(views.get(position));
    		}
    
    		@Override
    		public Object instantiateItem(ViewGroup view, int position) {
    			try {
    				if (views.get(position).getParent() == null) {
    					view.addView(views.get(position));
    				} else {
    					((ViewGroup) views.get(position).getParent())
    							.removeView(views.get(position));
    					view.addView(views.get(position));
    				}
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    			return views.get(position);
    		}
    	}
    
    	/**
    	 * 标签页点击切换监听器
    	 * 
    	 * @author Administrator
    	 * 
    	 */
    	private class TabChangeListener implements OnTabChangeListener {
    		@Override
    		public void onTabChanged(String tabId) {
    			if (PAGE1_ID.equals(tabId)) {
    				pager.setCurrentItem(0);
    			} else if (PAGE2_ID.equals(tabId)) {
    				pager.setCurrentItem(1);
    			} else if (PAGE3_ID.equals(tabId)) {
    				pager.setCurrentItem(2);
    			} 
    		}
    	}
    
    	/**
    	 * ViewPager滑动切换监听器
    	 * 
    	 * @author Administrator
    	 * 
    	 */
    	private class PageChangeListener implements OnPageChangeListener {
    		@Override
    		public void onPageScrollStateChanged(int arg0) {
    		}
    
    		@Override
    		public void onPageScrolled(int arg0, float arg1, int arg2) {
    		}
    
    		@Override
    		public void onPageSelected(int arg0) {
    			tabHost.setCurrentTab(arg0);
    		}
    	}
    
    	/**
    	 * 创建tab View
    	 * 
    	 * @param string
    	 * @return
    	 */
    	private View createTabView(int stringId) {
    		View tabView = getLayoutInflater().inflate(R.layout.tab, null);
    		TextView textView = (TextView) tabView.findViewById(R.id.tab_text);
    		textView.setText(stringId);
    		return tabView;
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
    
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    		int id = item.getItemId();
    		if (id == R.id.action_settings) {
    			return true;
    		}
    		return super.onOptionsItemSelected(item);
    	}
    }
    

    当中的layout/tab.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@drawable/state_tabs_bg" >
        
        <TextView 
            android:id="@+id/tab_text"
            android:layout_width="wrap_content"
        	android:layout_height="wrap_content"
        	android:layout_marginTop="11dp"
        	android:layout_gravity="center_horizontal"
        	android:textSize="18sp"
        	android:textColor="@color/tab_widget_text"/>
    
    </LinearLayout>

    drawable/state_tabs_bg.xml
     
    <?xml version="1.0" encoding="utf-8"?

    > <!-- tab每一个标签背景 --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/tabs_selected_bg" /> <item android:drawable="@drawable/tabs_normal_bg"></item> </selector>


    drawable/tabs_selected_bg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item>
            <shape>
                <solid android:color="@color/color_orange" />
            </shape>
        </item>
        <item android:bottom="5dp">
            <shape>
                <solid android:color="#eeeeee" />
            </shape>
        </item>
    
    </layer-list>

    drawable/tabs_normal_bg.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
      <item>
            <shape>
                <solid android:color="@color/color_orange" />
            </shape>
        </item>
        <item android:bottom="1dp">
            <shape>
                <solid android:color="#eeeeee" />
            </shape>
        </item>
    
    </layer-list>

    好至此的话 我们的代码算是ok了,可是当你执行的时候却发现跑不起来。为啥 呢???

    且看一下我们的Frame里面,改动ImageFrame.java:

    package com.jov.germany.frame;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import com.jov.germany.R;
    
    public class ImageFrame extends Fragment{
    	 @Override  
    	    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
    	            Bundle savedInstanceState) {  
    	        return inflater.inflate(R.layout.image_frame, container, false);  
    	    }  
    }
    

    你可能会认为没什么差别,看一下我们的Fragment引用的包,不一样哦。


    好吧,最后MainAcitivity.java中的String内容自己 在string.xml里面自己加把


    没有截滑动效果。

    近期各种忙,更新的 有点慢,没办法啊



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    set
    皮肤病药物
    C 批量保存图片进 mysql 利用MYSQL_BIND插入longblob
    eclipse行号显示
    dynamic_cast使用
    list添加删除操作
    VS2008 对齐代码
    c++ mysql二进制存取,blob存取
    Select Window关键字——模拟打开了多个页面窗口时,在不同的窗口之间,进行窗口切换
    Click Image关键字——模拟单击某一个图片 其余:Click Button / Click Link
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4651652.html
Copyright © 2020-2023  润新知