如何获取fragment里的控件

如何获取fragment里的控件,第1张

不能在onCreate函数中获取控件,以为fragment还没有start,你可以在onStart函数中获取:

@Override

protected void onStart() {

superonStart();

View view = thisfindViewById(RidbtnTest);

viewsetOnClickListener(new androidviewViewOnClickListener(){

public void onClick(androidviewView v) {

//TODO

}

});

}

我之前也遇到这样的问题。

android 布局 layout relativelayout

除了沉浸模式外,Android 44还有新的API,能使应用内的状态栏和虚拟按钮透明。其他更多的Android 44 APIs可以看这里。

如果要使应用内的状态栏和虚拟按钮变成透明有两种方法。

一种是代码方式:

1

2

3Window window = getWindow();

windowsetFlags(WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS,

WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS);

windowsetFlags(WindowManagerLayoutParamsFLAG_TRANSLUCENT_NAVIGATION,

WindowManagerLayoutParamsFLAG_TRANSLUCENT_NAVIGATION);

另外一种是使用两个新的主题风格:

ThemeHoloNoActionBarTranslucentDecor和ThemeHoloLightNoActionBarTranslucentDecor。

但是这种方式只支持Android44以上系统,所以为了保持兼容性,我们还是采用代码方式比较好。只需要先判断,如果是44以上系统才启用代码。

开启后上下系统栏都透明了。

但是如果应用本身是带有actionbar或者标题栏的话会就会变得比较尴尬,内容会在上面露出来。这个时候需要在布局文件里加入android:fitsSystemWindows="true"。

android:id="@+id/layout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#c8c8c8" >

android:id="@+id/listview"

android:layout_width="match_parent"

android:layout_height="match_parent" />

但是这样的话内容就不能从透明的虚拟按钮下穿过,没原来那么好看。我们可以按照以前一样把根布局设置一个高度为系统栏高度和ActionBar高度的内边距就可以。

同时关于获取ActionBar和状态栏的高度,发现用原来的方法有时候会获取的值为0。自己google找了一下,找到两个前辈提供的获取高度方法,获取ActionBar高度,获取状态栏高度。

8if (androidosBuildVERSIONSDK_INT > 18) {

Window window = getWindow();

windowsetFlags(WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS,

WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS);

windowsetFlags(WindowManagerLayoutParamsFLAG_TRANSLUCENT_NAVIGATION,

WindowManagerLayoutParamsFLAG_TRANSLUCENT_NAVIGATION);

//设置根布局的内边距

RelativeLayout relativeLayout = (RelativeLayout)

findViewById(Ridlayout);

relativeLayoutsetPadding(0, getActionBarHeight()+getStatusBarHeight(), 0,

0);

}

27// 获取手机状态栏高度

public int getStatusBarHeight() {

Class c = null;

Object obj = null;

Field field = null;

int x = 0, statusBarHeight = 0;

try {

c = ClassforName("comandroidinternalR$dimen");

obj = cnewInstance();

field = cgetField("status_bar_height");

x = IntegerparseInt(fieldget(obj)toString());

statusBarHeight = getResources()getDimensionPixelSize(x);

} catch (Exception e1) {

e1printStackTrace();

}

return statusBarHeight;

}

// 获取ActionBar的高度

public int getActionBarHeight() {

TypedValue tv = new TypedValue();

int actionBarHeight = 0;

if (getTheme()resolveAttribute(androidRattractionBarSize, tv, true))//

如果资源是存在的、有效的

{

actionBarHeight = TypedValuecomplexToDimensionPixelSize(tvdata,

getResources()getDisplayMetrics());

}

return actionBarHeight;

}

接下来,因为我自己写的一些应用是暗色的主题的,会导致透明的状态栏和ActionBar颜色不太协调。看到有一些应用是把状态栏的颜色设置成和ActionBar一样,这种解决方法也不错。

具体是怎么实现的也不太清楚,我自己猜测写了一个差不多状态栏。我是直接在根视图加入一个高度为状态栏高度的TextView,背景设置为和ActionBar一样。具体代码如下:

8// 创建TextView

TextView textView = new TextView(this);

LinearLayoutLayoutParams lParams = new

LinearLayoutLayoutParams(LayoutParamsMATCH_PARENT, getStatusBarHeight());

textViewsetBackgroundColor(ColorparseColor("#3F9FE0"));

textViewsetLayoutParams(lParams);

// 获得根视图并把TextView加进去。

ViewGroup view = (ViewGroup) getWindow()getDecorView();

viewaddView(textView);

在模拟器上看还行,但是在实际的手机当中总感觉ActionBar有点过大,所以我在背景色里加入了一些渐变,在实体手机中就比较好看一点,不会觉得ActionBar太宽了。

android:startColor="#c8c8c8"

android:endColor="#3F9FE0"

android:angle="270"

android:type="linear"/>

getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度。

getLocationInWindow ,计算该视图在它所在的widnow的坐标x,y值, 非常准确!

getLeft , getTop, getBottom, getRight, 这一组是获取相对在它父亲里的坐标。

不要把它当成一个home icon,自己定义一个布局实现就行了,Actionbar是可以设置custom View的。ActionBar里面原有的东西其实也只是系统给你添加了一组布局而已。

/changeactionbar 2 切换到2号动作条 /changeactionbar 

1 切换到1号动作条 /swapactionbar 1。

2 在1和2号动作栏之间来回切换 举个例子 /cast 技能 /changeactionbar [mod:alt] 2 当你按下alt 和这个宏就变成技能栏2页。

故事背景(黑石之祸)

经历了天灾入侵的艾泽拉斯大陆满目疮痍,费伍德森林变成了一片死地,提瑞斯法林地游荡者那些早已死去却又一次站起的腐朽身躯,夜色镇终日浓雾弥漫,希利苏斯的沙漠中暗流涌动,洛丹伦王国覆灭,伊利丹背叛暗夜精灵被流放外域。

阿尔萨斯这个曾经的王子终于登上了冰封王座,成为了坐镇诺森德的新巫妖王,似乎战争暂时平息,因为战争部落和联盟达成的那些脆弱的协议似乎已经逐渐被人遗忘。

以上就是关于如何获取fragment里的控件全部的内容,包括:如何获取fragment里的控件、android怎么让状态栏跟app同色、安卓:如何获取屏幕中一个View的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9385516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存