按照一般的思路,我们或许会这么做:首先,使用getActionBar()方法获得 *** 作栏,然后我们将 *** 作栏的导航模式设置为Tab,并添加一些Tab,然后实现TabListener接口;其次,我们将多个布局通过Inflater()方法变成View,然后放到ViewPager里面,并实现OnPageChangeListener接口就可以了。由此我们可以写出下面的代码:
package comAndroidAnyViewUI;
import javautilArrayList;
import androidosBundle;
import androidsupportv4appFragmentActivity;
import androidsupportv4appFragmentManager;
import androidsupportv4viewViewPager;
import androidsupportv4viewViewPagerOnPageChangeListener;
import androidappActionBar;
import androidappActionBarTab;
import androidappActionBarTabListener;
import androidappActivity;
import androidappFragmentTransaction;
import androidviewLayoutInflater;
import androidviewView;
public class MainActivity extends FragmentActivity implements TabListener,OnPageChangeListener {
private ActionBar mActionBar;
private ViewPager mViewPager;
private TabPagerAdapter mAdapter;
private ArrayList<View> mViews;
private ArrayList<ActionBarTab> mTabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutlayout_main);
//取得ActionBar
mActionBar=getActionBar();
//以Tab方式导航
mActionBarsetNavigationMode(ActionBarNAVIGATION_MODE_TABS);
//禁用ActionBar标题
mActionBarsetDisplayShowTitleEnabled(false);
//禁用ActionBar图标
mActionBarsetDisplayUseLogoEnabled(false);
//禁用ActionBar返回键
mActionBarsetDisplayShowHomeEnabled(false);
//添加Tabs
mTabs=new ArrayList<ActionBarTab>();
ActionBarTab tab0=mActionBarnewTab();
tab0setText("界面一");
tab0setTabListener(this);
mTabsadd(tab0);
mActionBaraddTab(tab0);
ActionBarTab tab1=mActionBarnewTab();
tab1setText("界面二");
tab1setTabListener(this);
mTabsadd(tab1);
mActionBaraddTab(tab1);
ActionBarTab tab2=mActionBarnewTab();
tab2setText("界面三");
tab2setTabListener(this);
mTabsadd(tab2);
mActionBaraddTab(tab2);
//获取ViewPager
mViewPager=(ViewPager)findViewById(RidViewPager);
//初始化mViews
mViews=new ArrayList<View>();
mViewsadd(LayoutInflaterfrom(this)inflate(Rlayoutlayout_0, null));
mViewsadd(LayoutInflaterfrom(this)inflate(Rlayoutlayout_1, null));
mViewsadd(LayoutInflaterfrom(this)inflate(Rlayoutlayout_2, null));
//初始化mAdapter
mAdapter=new TabPagerAdapter(mViews);
mViewPagersetAdapter(mAdapter);
mViewPagersetOnPageChangeListener(this);
//默认显示第二项
mViewPagersetCurrentItem(2);
}
@Override
public void onTabReselected(Tab mTab, FragmentTransaction arg1)
{
}
@Override
public void onTabSelected(Tab mTab, FragmentTransaction arg1)
{
if(mViewPager!=null)
{
mViewPagersetCurrentItem(mTabgetPosition());
}
}
@Override
public void onTabUnselected(Tab mTab, FragmentTransaction arg1)
{
}
@Override
public void onPageScrollStateChanged(int arg0)
{
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
@Override
public void onPageSelected(int Index)
{
//设置当前要显示的View
mViewPagersetCurrentItem(Index);
//选中对应的Tab
mActionBarselectTab(mTabsget(Index));
}
}
其中,TabPagerAdapter是一个继承自PagerAdapter的适配器类:
package comAndroidAnyViewUI;
import javautilArrayList;
import androidsupportv4viewPagerAdapter;
import androidsupportv4viewViewPager;
import androidviewView;
public class TabPagerAdapter extends PagerAdapter
{
private ArrayList<View> mViews;
public TabPagerAdapter(ArrayList<View> mViews)
{
thismViews=mViews;
}
@Override
public void destroyItem(View container, int position, Object object)
{
((ViewPager)container)removeView(mViewsget(position));
}
@Override
public Object instantiateItem(View container, int position)
{
((ViewPager)container)addView(mViewsget(position), 0);
return mViewsget(position);
}
@Override
public int getCount()
{
return mViewssize();
}
@Override
public boolean isViewFromObject(View mView, Object mObject)
{
return (mView==mObject);
}
}
我们的代码从逻辑上来讲是没有什么问题的,但是当我们试图运行这段代码的时候,我们发现这段代码出了问题,而问题就出在OnTabSelected()上。但是我们冷静下来想了想,没有错啊,那么问题到底出在哪里呢?看到网上的朋友说,这里这个适配器应该继承自FragmentPagerAdapter:
package comAndroidAnyViewUI;
import androidsupportv4appFragment;
import androidsupportv4appFragmentManager;
import androidsupportv4appFragmentPagerAdapter;
public class ViewPagerAdapter extends FragmentPagerAdapter {
//定义三个Fragment的索引
public static final int Fragment_Index_0=0;
public static final int Fragment_Index_1=1;
public static final int Fragment_Index_2=2;
public ViewPagerAdapter(FragmentManager fragmentManager)
{
super(fragmentManager);
}
@Override
public Fragment getItem(int Index)
{
Fragment mFragemnt=null;
switch(Index)
{
case Fragment_Index_0:
mFragemnt=new Fragment_0();
break;
case Fragment_Index_1:
mFragemnt=new Fragment_1();
break;
case Fragment_Index_2:
mFragemnt=new Fragment_2();
break;
}
return mFragemnt;
}
@Override
public int getCount()
{
return 3;
}
}
其中,Fragment_0、Fragment_1、Fragment_2是继承自Fragment的类,由于三个布局基本一样,这里只给出Fragment_0的代码:
package comAndroidAnyViewUI;
import androidosBundle;
import androidsupportv4appFragment;
import androidviewLayoutInflater;
import androidviewView;
import androidviewViewGroup;
public class Fragment_0 extends Fragment
{
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View mView=inflaterinflate(Rlayoutlayout_0, container, false);
return mView;
}
}
ActionBar 最左侧图标设置不可点击只需要以下步骤:
1获取ActinBar实例
ActionBar actionBar = getActionBar();
2设置不可点击
actionBarsetDisplayHomeAsUpEnabled(true); // 决定左上角图标的右侧是否有向左的小箭头。true 有小箭头,并且图标可以点击,false没有小煎头,并且不可点击。
3actionBarsetDisplayShowHomeEnabled(false);//设置是否显示HOME图标,false表示没有。
ios 怎么获取一个view的位置
打开appstore进入应用,右上角的分享按钮(从右往左数第二个),拷贝连接即可。如下图:
如何获取一个view在布局中的位置public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listViewgetFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listViewgetChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition ) {
return listViewgetAdapter()getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listViewgetChildAt(childIndex);
}
} 已解决,通过这个方法就可以实现了获取item中的view
如何获取一个uicollectionviewcell的位置UICollectionViewCell cell = (UICollectionViewCell )[collectionView
cellForItemAtIndexPath:indexPath];一句话就能获取到点击cell的frame,十分好用,同样适用于tableView。
ios中怎么获取collectionview中cell的位置你在点击cell的时候调用 - (void)performSegueWithIdentifier:(NSString )identifier sender:(id)sender ;
那不是有个sender嘛,你可以给它传值。
然后在-(void)prepareForSegue:(UIStoryboardSegue )segue sender:(id)sender 里的sender,就是你刚传的那个值。
Flash中怎么通过代码来获取一个左上、右下的位置,_x和_y只能获取图像原点的位置。设左上坐标(x1,y1),右下坐标(x2,y2),原点坐标(x0,y0),元件名称为mcPic,则:
x1 = mcPicx - mcPicwidth/2
y1 = mcPicy - mcPicheight/2
x2 = mcPicx + mcPicwidth/2
y2 = mcPicy + mcPicheight/2
x0 = mcPicx
y0 = mcPicy
怎样通过qq获取一个人的位置信息
除了使用者本人定位,其他人无法获取,这属于隐私保护
android 怎么获取ActionBar上某个menu的位置Android 30以上的手机默认是不显示溢出菜单的,那如何强制在Android 44以下的手机显示溢出菜单呢?可以使用以下方法:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
强制actionbar显示overflow菜单
适配类似魅族手机无法显示溢出菜单的解决方案
上面已经解决了如何在Android 44以下的手机强制显示溢出菜单,下面来解决一些奇葩手机无法显示溢出菜单的问题。为什么魅族手机无法显示,了解到的是魅族没有所谓的actionbar,它们称为 artbar,看来是魅族的工程师把官方的actionbar进行了修改。一个字,坑!不过小巫想到了一个解决办法,我们每部手机都有自己的手机品牌,我们可以针对这些奇葩手机进行适配,溢出菜单我们就使用popupwindow来替代。
MATLAB中,怎么获取一个向量中最大的N个元素,并获取它们所在的位置v=rand(1,5)
[mv mi]=max(v)
%mv为最大值,mi为最大值索引,v(mi)=mv
[sv si]=sort(v,2,'descend')
%si为从大到小的序列,比如要去最大的3个数就是v(si(1:3))
ios地图定位怎么获取两个点之间的位置通常我们在手机端打开百度地图后,客户端会自动对我们所处的位置进行定位的。如果没有进行定位的话,你可以点击地图页面的左下角的圆形图标,见下图红色框中所示,点击之后会自动更新,并且显示定位的地址信息。
VBS中如何获取一个数组中最大值的位置以下VBS脚本可以实现这个功能:
Public Function getArrMaxValueIndex(ByVal arr)
Dim ix, ixMax
ixMax = 0
For ix = 1 To UBound(arr)
If ( arr(ixMax) < arr(ix) ) Then
ixMax = ix
End If
Next
getArrMaxValueIndex = ixMax
End Function
'Define array and index for max entry
Dim arr, ixMax
'Initialize the array
arr = Array(4, 1, 8, 6, 3,6)
'Get the index of the max value
ixMax = getArrMaxValueIndex(arr)
'Print result
MsgBox "Max value: " & arr(ixMax) & " was found at " & ixMax & " index"
有时候在一些子页面或者内容页面,不需要显示ActionBar的标题栏图标。可用如下方式进行设置。
首先获取到ActionBar对象
ActionBar actionBar=getActionBar();
使用android:logo属性。不像方方正正的icon,logo的图像不会有任何宽度限制。
logo图像典型的给你的APP提供品牌。当有Logo的时候,可以隐藏label。
默认的,ActionBar使用Activity的android:icon属性,还有一致的android:label属性。
隐藏Label标签:actionBarsetDisplayShowTitleEnabled(false);
隐藏logo和icon:actionBarsetDisplayShowHomeEnabled(false);
设置标题,一个主标题,一个子标题
actionBarsetSubtitle(“Inbox”);
actionBarsetTitle(“Label:important”);
默认的ActionBar的背景颜色取决于activity指定的Theme。Holo Theme它的背景是黑色的。
可以指定任意的Drawabel对象作为背景,使用setBackgroundDrawable方法:
ActionBar actionBar = getActionBar();
Resources r = getResources();
Drawable myDrawable = rgetDrawable(Rdrawablegradient_header);
actionBarsetBackgroundDrawable(myDrawable);
注意:ActionBar会自动缩放你的背景图
覆盖模式
默认情况下,actionBar放在activity的顶部,且作为activity布局的一部分。设置成为覆盖模式后,actionBar相当于漂浮在activity之上,不干预activity的布局。设置如下:
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
getWindow()requestFeature(WindowFEATURE_ACTION_BAR_OVERLAY);
setContentView(Rlayoutmain);
}
getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度。
getLocationInWindow ,计算该视图在它所在的widnow的坐标x,y值, 非常准确!
getLeft , getTop, getBottom, getRight, 这一组是获取相对在它父亲里的坐标。
以上就是关于android 在fragment里的怎样实现滑动fragment全部的内容,包括:android 在fragment里的怎样实现滑动fragment、android中的actionbar怎么设置左侧图标、ios 怎么获取一个view的位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)