fragment导航栏(fragment view)
本文目录一览:
- 1、求教android studio大神:用fragment写一个导航栏,在每个fragment里面加listview,能实现点击事件
- 2、如何在Fragment中使用ViewPager,并实现导航随手势滑动效果
- 3、安卓关于用fragement实现导航栏,假设已经写好了三个fragement的xml文件,底部有三
- 4、新手诚心求助,安卓开发底部的导航栏除了用fragment还有别的选择吗?
- 5、怎么在preferencefragment显示自定义导航栏
- 6、如何在fragment中点击导航栏一项切换到另一个fragment中
求教android studio大神:用fragment写一个导航栏,在每个fragment里面加listview,能实现点击事件
AndroidStudio制作底部导航栏以及用Fragment实现切换功能,用户点击底部导航栏可以实现三个模块的跳转。
图片资源
需要底部导航栏三个点击按钮的图片资源
main_button_1.png,main_button_2.png,main_button_3.png
以及点击变换的图片资源
main_button_1_selected.png,
main_button_2_selected.png,
main_button_3_selected.png.
以上图片资源都放进drawable文件夹中
activity_main 布局
在 MainActivity 页面中主要有两个区域:
一个是放 Fragment 的 main_body
一个是放底部导航栏的 main_bottom_bar
主要的Fragment代码块:
如何在Fragment中使用ViewPager,并实现导航随手势滑动效果
今天主要介绍的是:在Fragment中使用ViewPager,ViewPager的内容依然是多个Fragment。要实现View的滑动效果,就必须不断的改变他的位置,可以通过setLayoutParams,也可以通过scrollTo或者scrollBy,或者
重写控件等,这里我使用的是更简单的setX(float x),就是改变View的X的坐标位置就OK了,十分的方便。
看一下最主要的代码:
[java] view
plaincopy
mPageVp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
currentIndex = position;
}
@Override
public void onPageScrolled(int position, float offset,
int offsetPixels) {
if(currentIndexposition(currentIndex-position)==1)
{
int xOffset = (int) (-(1 - offset)
* (screenWidth * 1.0 /pageNum) + currentIndex
* (screenWidth /pageNum));
rlOverlay.setX(xOffset);
}else if(currentIndex==position)
{
int xOffset = (int) (offset * (screenWidth * 1.0 /pageNum) + currentIndex
* (screenWidth /pageNum));
rlOverlay.setX(xOffset);
}
}
@Override
public void onPageScrollStateChanged(int state) {
//在这里来改变被选中的item的高亮样式
}
});
可以看到上面根据currentIndex以及position的变化,不断的计算View的X对应要滑动到的位置,currentIndex是当前选中的item索引,position是ViewPager滑动时显示的视图的索引。
看一下效果图:
现在来说一下如果通过setLayoutParams会出现什么问题,如果是通过这种方式,那么当你切换到这个Fragment时,初始化的时候即使你通
过setCurrentItem(2)来设置默认显示第三个子fragment,导航栏中的蓝色背景依然停留在第一个导航处,到那时下面的内容显示是第三
个。另外你第一次通过手指切换内容视图的时候,上面的蓝色背景不会随着手指一动,只有页面切换完成,他才会移动,就是在ViewPager滚动过程
中,setLayoutParams没有起作用,虽然执行了,但是没有效果,后面再滑动的时候就会随着手指移动了。
上面代码中判断语句:
[java] view
plaincopy
if(currentIndexposition(currentIndex-position)==1)
之所以这样写,是因为如果不添加currentIndex-position==1的判断,从第一个滑到第三个或者第四个,背景图片会出现颤抖的情况,其实这种效果也很不错,要是喜欢,可以把这个后面的去掉。
安卓关于用fragement实现导航栏,假设已经写好了三个fragement的xml文件,底部有三
相关代码:
/**
* 初始化fragment
*/
private void setFragmentIndicator(int whichIsDefault) {
mFragments = new Fragment[3];
mFragments[0] = getSupportFragmentManager().findFragmentById(R.id.fragment_home);
mFragments[1] = getSupportFragmentManager().findFragmentById(R.id.fragment_search);
mFragments[2] = getSupportFragmentManager().findFragmentById(R.id.fragment_settings);
getSupportFragmentManager().beginTransaction().hide(mFragments[0])
.hide(mFragments[1]).hide(mFragments[2]).show(mFragments[whichIsDefault]).commit();
FragmentIndicator mIndicator = (FragmentIndicator) findViewById(R.id.indicator);
FragmentIndicator.setIndicator(whichIsDefault);
mIndicator.setOnIndicateListener(new OnIndicateListener() {
@Override
public void onIndicate(View v, int which) {
getSupportFragmentManager().beginTransaction()
.hide(mFragments[0]).hide(mFragments[1])
.hide(mFragments[2]).show(mFragments[which]).commit();
}
});
}
网址:
新手诚心求助,安卓开发底部的导航栏除了用fragment还有别的选择吗?
纯Activity不是不可以,方案如下:
底部用TabLayout
上方就一个activity layout xml布局
通过切换tab来 控制每个tab对应的 布局块的 visibility
可以达到不用fragment的效果。
但是:
从软件工程的角度上讲fragment把每个tab逻辑分离,不需要管理其它tab的事情。
耦合度较低。会让你的代码可阅读性更高。代码是写给人看的,如果把全部布局,逻辑都揉在一个activity里,估计过不了一周,你可能都看不懂自己的代码了。
怎么在preferencefragment显示自定义导航栏
关于自定义Preference内置控件及PreferenceFragment笔记,有需要的朋友可以参考下。
我们知道系统Preference提供的控件并不多,只有CheckBoxPreference,ListPreference,EditTextPreference,RingtonePreference等为数不多的控件,有时候并不能满足我们的需求.这时候我们就需要自定义,比如自定义一个SeekBar用来调节音量什么的.这里我就不介绍如何自定义包含SeekBar的Preference,大家可以查看Android自定义SeekBarPreference.
这里需要提及的是,我们自定的这个控件,往往需要和Activity或者Service通信,这时候该怎么操作呢?
我们同样还是以SeekBarPreference为例.我们都知道,当滑动SeekBar的时候,系统会回调onProgressChanged方法.假如我们需要在onProgressChanged中与
Activity/Fragment/Service通信.这时候就需要定义一个接口在其中声明我们需要用到的方法.然后声明一个函数,将接口的引用作为参数提供给Activity/Fragment/
Service调用.
public class VolumeSeekBarPreferences extends DialogPreference implements OnSeekBarChangeListener {
private seekBarCallBack back;
....
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
....
back.setSeekBarVolume(mCurrentValue);
....
}
....
public interface seekBarCallBack{
public void setSeekBarVolume(int volume);
}
public void setSeekbarListener(seekBarCallBack barCallBack){
back = barCallBack;
}
}
然后,在Activity/Fragment/Service中通过实现控件Preference中的传递接口引用的函数.
public class MyPreferenceFragment extends PreferenceFragment implements
OnPreferenceClickListener, OnPreferenceChangeListener {
private VolumeSeekBarPreferences seekBarPreferences;
.....
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.preference_setting);
//VolumeSeekBarPreferences为我们自定义的Preference控件
seekBarPreferences = (VolumeSeekBarPreferences) findPreference("seekBarPreference");
seekBarPreferences.setSeekbarListener(new seekBarCallBack() {
@Override
public void setSeekBarVolume(int volume) {
// TODO Auto-generated method stub
//在这里实现通信
}
});
}
.....
}
如何在fragment中点击导航栏一项切换到另一个fragment中
在一个fragment中 切换到另外一个fragment 如果是同一个Activity中, 那么直接在Activity中写个切换的方法, 然后在Fragment调用 getActivity() 来得到这个Activity再调用它的切换方法即可