安卓杂思

1.ScrollView嵌套ListView获取ListView总高度:

comments.addAll(JsonHelper.convertList(JsonHelper.tojson(response.getResult()), PostComment.class));
adapter.setComments(comments);
int listViewHeight = 0;
if(listView.getLayoutParams() != null) {
    for (int i = 0, count = adapter.getCount(); i < count; i++) {
        View listItem = adapter.getView(i, null, listView);
        listItem.measure(0, 0);
        listViewHeight += listItem.getMeasuredHeight();
    }
    listView.getLayoutParams().height = listViewHeight;
    listView.setLayoutParams(listView.getLayoutParams());
    listView.requestLayout();
}

2.判断ListView的内容向上飞还是向下飞

listView.getRefreshableView().setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        final ListView lw = listView.getRefreshableView();
        if(scrollState == 0) {
            final int currentFirstVisibleItem = lw.getFirstVisiblePosition();
            if (currentFirstVisibleItem > mLastFirstVisibleItem) {
                Log.i("a", "文字向上飞");
                ObjectAnimator.ofFloat(ll_article_detail_bottom, "translationY", toolBarBotom, toolBarBotom + toolBarHeight).setDuration(1000).start();
            } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
                Log.i("a", "文字向下飞");
                ObjectAnimator.ofFloat(ll_article_detail_bottom, "translationY", toolBarBotom + toolBarHeight, toolBarBotom).setDuration(1000).start();
            }
            mLastFirstVisibleItem = currentFirstVisibleItem;
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

    }
});

3.ScrollView要嵌套ListView: 推荐在一个listview里面做。把握好addHeaderView(view, null, false)跟addFooterView,足以应对了。

4.WebView在xml设置android:scrollbars=”none”不显示滚动条。

5.先发送登录api,后存jsession

6.Fragment的setUserVisibleHint方法类似于Activity的onResume

7.http的请求方式 get post put delete 分别对应 查 改 増 和 删

8.继承了Application的类要在清单文件的application节点配好类名才会被调用。但是继承Application的类在清单文件配置的时候在一些集成开发环境ide要省略前面的点。

9.替换Fragment

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(android.R.id.content, PlaceHolderFragment.newInstance()).commit();

10.缓存也是存数据库

11.Fragment往子Fragment传参,子Fragment的私有变量提供set方法。

12.spinner使用:

adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, years);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

13.按钮边框:

<stroke
    android:width="1dp"
    android:color="@color/glh_grey_line"
    android:dashWidth="0dp"
    android:dashGap="2dp" />

14.AutoCompleteTextVIew

15.如果arraylist是null,则不能调用clear方法

16.wv_home_content.loadUrl(file:///android_asset/loading.html);

17.从服务器传过来的json数据中,value如果是以数字开头的话,用jsonnode直接get会得到用双引号括起来的value,例如”1eabcd”,所以要想得到原来的值,应该调用substring函数将value前后的双引号去掉。

18.viewpager如果用同一个adapter图片无论如何都无法更新,就用另一个viewpager。

19.安卓版本比较android.os.Build.VERSION.SDK_INT >= 18

20.在子线程里setText不生效可能是子线程不能刷新界面,要刷新主界面。现在才知道是不能在子线程中操控控件。正确的做法应该是在子线程中发送消息给窗口。让界面线程自己管理界面。

21.写ActivityManager的目的是用于那些有“退出”按钮的应用,如果没有退出按钮,说明用户默许我们一步一步退出应用。

22.编译的时候没有错,运行的时候却报找不到类的错误,很可能是版本不支持。.查看详情

23.获取WebView当前处理的url

public boolean shouldOverrideUrlLoading(WebView view, String url) {
     view.loadUrl(url);
     // 记住当前的URL
     currentLeftUrl = url;
     // 由当前的WebView处理跳转
     return true;
 }

24.设置全屏、没有标题:

super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  WindowManager.LayoutParams.FLAG_FULLSCREEN);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_loading);

25.拨打电话的时候报activitynotfoundexception,记得要把”tel:”加上:

Intent intent=new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + logisticsTelephone));
startActivity(intent);

26.ImageView展示本地图片:

ImageView imageView = new ImageView(mActivity);
// 展示本地图片
imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.logistics_default));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
images.add(imageView);
adapter.notifyDataSetChanged();

27.对话框

new AlertDialog.Builder(ReceivedGiftDetailActivity.this).setTitle(R.string.label_reject_gift).setMessage(R.string.msg_gift_rejected_confirm)
 .setPositiveButton(R.string.msg_more_version_yes, new DialogInterface.OnClickListener() {
 @Override
 public void onClick(DialogInterface dialog, int which) {
 new DealGiftTask(REJECT_GIFT).execute();
 }
 }).setNegativeButton(R.string.msg_more_version_no, null).show();

28.本地图片Drawable转Bitmap

res= getResources();//activity的方法
BitmapFactory.decodeResource(res, id);//id = R.drawable.x

29.相对布局toRightOf 的时候No resource found 找不到id,是因为要将用到的id写在前面,或者无论何时都带@+

30.明明在xml中配置了activity,一切也正常,为什么还是报找不到activity的空指针异常?很有可能是清单文件的application的theme限定死了,而某些activity用到了getActionBar方法,结果为空,就找不到了。也有可能是activity.xml文件中context限定了。

30.三种方法得到实例化的layout的方法:

LayoutInflater inflater = getLayoutInflater(); 
LayoutInflater inflater = (LayoutInflater) layout
mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog,null);
LayoutInflater.from(mContext).inflate(R.layout.item_message_list, null);

31.TextView增加如下属性实现走马灯:

android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"

32.要想RadioButton在RadioGroup文字图片都居中,除了button为null之外,background也要null

33.ImageButton加上android:background=”@null”可以去除边框

34.获取状态栏高度

public static int getStatusBarHeight() {
 return Resources.getSystem().getDimensionPixelSize(
 Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android"));
}

35.按钮setTag, Button可以set一个tag,然后在onClick事件里面v.getTag就可以得到相应的对象或字符串。

holder.checkGiftButton.setTag(myGift);
// 点击查看礼物
holder.checkGiftButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (v.getTag() instanceof MyGift) {
            MyGift myGift = (MyGift) v.getTag();
            Intent mIntent = new Intent();
            mIntent.putExtra("gift_id", myGift.getGift_id());
            mIntent.setClass(context,
            ReceivedGiftDetailActivity.class);
            context.startActivity(mIntent);
        }
    }
});

36.字符串插入变量值

tv_expired_time.setText(String.format(getString(R.string.label_expired_time), DateUtils.getCurrentTime()));

37.滑动开关

<com.woyoli.views.WiperSwitch
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="10dp" />

38.view也可以直接setTag

Holder holder = new Holder();
view.setTag(holder);
private static class ViewHolder {
    ImageView giftImage;
    TextView giftTitle;
    TextView giftNumber;
    Button checkGiftButton;
    Button shareButton;
    CircularImage userIcon;
    int position;
}

39.保证旋屏不会重走生命周期:

<activity
    android:name=".activity.ReceivedGiftDetailActivity"
    android:configChanges="screenSize|orientation|keyboardHidden|navigation"
    android:label="@string/app_name"
    android:screenOrientation="portrait" />

40.width或height要设为0dp权重才会忽略margin的space

41.由drawable的id得到drawable

allGiftButton.setBackground(getResources().getDrawable(R.drawable.button_my_gift_all_pressed));

42.要第二次进去头像才是圆的,这是因为有时候网络比较差,无法瞬间加载所有的图片,这时候就要在display的回调函数(callback)里面设置图片,以保证图片是已经缓冲好了。

43.LinearLayout是从上到下分配空间的,比如vertical的话,假如下部的控件的宽高都是match_parent,但是实际效果是除开上部分之外的其余空间。

44.只有文字用ArrayAdapter,有本地图片SimpleAdapter,有网络图片用BaseAdapter。

45.点击popupwindow之外其他地方隐藏popwindow:

neighborhoodWindow.setOutsideTouchable(true);
neighborhoodWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), Bitmap.createBitmap(dm.widthPixels, dm.heightPixels, Bitmap.Config.ALPHA_8)));

46.popupwindow在代码里加上popupwindow.setBackgroundDrawable(null);就可以去除边框,并且还保留原来的背景。

47.自定义Adapter在监听onItemClickListener的时候,总是被子控件拦截,干脆就用子控件来实现监听,而且子控件要match_parent。

48.FrameLayout解决layout点击事件被屏蔽:节点加上

android:descendantFocusability="blocksDescendants"

49.illness_TV.setTextColor(R.color.gray); 这个错了你这样用变成 颜色指是 R.color.gray指示的ID值了 应该是

illness_TV.setTextColor(this.getResources().getColor(R.color.gray));

50.左侧导航菜单,底部菜单,底部悬浮菜单,滑动菜单。

51.Android底部导航栏怎么做?ViewPager+RadioGroup+RadioButton+frament

52.有人说,不要用viewpager了,你可以用actionbar+Fragment实现。

53.Selector示例

<?xml version="1.0" encoding="utf-8"?> xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/checkbox_checked" android:state_checked="true"></item>
    <item android:drawable="@drawable/checkbox_checked" android:state_selected="true"></item>
    <item android:drawable="@drawable/checkbox_checked" android:state_pressed="true"></item>
    <item android:drawable="@drawable/checkbox_unchecked"></item>
</selector> selector>

54.CheckBox示例:

<CheckBox
    CheckBoxandroid:id="@+id/cb_agreeRegister"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:button="@null"
    android:checked="true"
    android:drawablePadding="5dp"
    android:drawableLeft="@drawable/selector_customed_checkbox" />

55.RelativeLayout中Button靠底部对齐,然后清单文件中设置activity为android:windowSoftInputMode=”adjustPan”就可以实现按钮总在软键盘上方

56.友盟既有统计又有推送:

先master后secret

<meta-datameta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="ivufpvhp8bh51tsntazsgjyotwhg5ppn" >
</meta-data>
<meta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="9fe0a415186f4e813d694970ffa04fc4" >
</meta-data>

57.Fragment嵌套问题在fragment里还有fragment的话,里面要用getChildFragmentManager()来获取fragmentManager

58.去掉EditText的下划线:

android:background="@null"

59.查看安卓系统是否支持ble

PackageManager pm = getPackageManager();
boolean isBT = pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
boolean isBLE = pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);

60.如果Activity继承了BaseActivity,只让父类接管onBackPressed,那么iv_back.setOnClickListener(new OnClickListener…),不能是this

61.出现onItemClickListener不能响应,原因可能有多种,本人总结了有两种情况,一种是isEnable中返回值为false导致不能点击和选择,一种是因为item中有了checkable或者button类(子类)控件导致了item的焦点失去,从不能响应。

62.将listview的分隔线去掉:

listview.setDividerHeight(0);

63.intentFeedback.putExtra(Constant.LOAD_URL_KEY, moreInfo.getFollow());

64.listview的adapter往下滚再往上滚UI会刷新(变化),可能因为switch没有处理好所有的情况,要处理所有情况并在default做一些默认的操作。

65.透明颜色:#000000

帧布局、PopupWindow(是一个widget,也可以理解为一个ViewGroup,可以放各种布局、控件)、ListPopupWindow

66.不同的xml文件可以有相同的id

67.最小和最大高度一样就是准确的高度了。

68.

ViewStub

FragmentTabs

69.在其他地方开发的Android项目,不自动编译,在清单文件更改了安卓最高版本,更改了编码格式为UTF-8,还是不行,这时候右键project,properties,Java build path,order and export,把本机的android sdk版本勾选上即可。有时候还要更改java jdk版本号。

70.当前变量获得焦点,其他地方没有变暗,默认的java视图下,在工具栏上应该会有一个Toggle Mark Occurency的按钮,选中就可以了。

71.string.xml中:

UI的:label_开头

消息的:msg_开头

72.android:id=”@+id/btn”,表示在R.java文件里面新增一个id为btn的控件索引,最常用的一种声明控件id的方式。android:id=”@android:id/tabhost”,表示引用的是系统已有的ID,在对应的sdk目录下的ids.xml里面。一般外部不去调用,是组件内部调用的时候使用。.android:id=”@id/btn” ,表示引用一个已经存在的ID,在R.java里面的,比如我们自己建了一个ids.xml,里面声明了一组id,其中一个是btn,那么你就可以这样引用了。

73.T 后面要用的话 必须都是 T? 后面要用 就不会有限制但是对于泛型本身而言。没有啥本质区别。

74.你在Xx类里定义了一个带参数的构造方法,那么这个Xx类就没有无参数的构造方法了。 子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了。 你如果在父类中写个不带参数的构造方法,就可以不用实现父类的带参构造方法了。

如果父类的构造函数无参,子类的构造函数可以有参也可以无参,但是子类有参的时候要调用父类的构造函数;如果父类的构造函数有参,那么子类的构造函数一定要有参。

75.一个类里面有另外一个类的对象,叫做聚合。

76.全屏:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

77.四张在线图片:

http://url.cn/XhlEfM

http://url.cn/UZz9Hy

http://url.cn/dPqnyF

http://url.cn/Z0Er2u

78.想在ViewPager切换的时候不刷新WebView,就设置缓存页数为Tab的总页数就行了。试试viewPager.setOffscreenPageLimit(3); 这个是设置viewPager的缓存页数

79.webview不能直接设高度

把你这个webview放到一个layout中,如LinearLayout (在你xml中定义)。 LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(w, l); ll.setLayoutParams(lp); ll.addView(webview); 就可以了

80.测量组件高度

RadioGroup mRadioGroup = (RadioGroup) mActivity.findViewById(R.id.rg_bottom);
mRadioGroup.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
bottomTabHeight = mRadioGroup.getMeasuredHeight();

81.要想TextView有按下效果,必须设置

android:clickable="true"

82.要想把包裹内容的栏放在底部,其余为一个整体在上面除了用帧布局的话,相对布局可能就要计算高度然后为内容设定高度了。

83.其实,在res文件夹下添加资源会在R文件中添加该资源的引用,如果该资源没有被使用到,也一样会把该资源打包进安装程序中。

84.最有效的:先导入附加的library,再导入目标项目,然后右击项目,property,安卓版本要对应,最主要的是add library里把附加的library添加进来。可能要在AndroidManifest.xml中修改最低版本号

85.PS:右击图层,转换为智能对象,编辑对象,就可以保存图片。

86.每次打开一个Activity都要add一下,虽然在点击后退的时候finish掉了,但是退出整个程序的时候还是要遍历fininsh掉。

87.有退出按钮:

1.记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。

2.发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。

3.递归退出:在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。为了编程方便,最好定义一个Activity基类,处理这些共通问题,也就是第一种。

时间: 2024-08-27 15:28:01

安卓杂思的相关文章

跨平台UI框架杂思——02

距离本系列最后一篇随笔<跨平台UI框架杂思--01>的发表已经过去了一年多.这一年多我都没怎么在外头写blog了(写东西都放在公司的 confluence page 里).这一年多我的"跨平台UI框架"实现了,并且用到了公司的产品中.我很欣慰地发现这一年多来,我都是按照最后一篇随笔的思路来开展的-- 硬件加速渲染 高可扩展性 灵活可替换的渲染框架 在Windows上面做透了 首先实现了 Direct2D 的渲染 由于这个框架是我在公司写的,所以目前暂且没能对外开源. 框架的

跨平台UI框架杂思——00

其实我写<我应该用什么界面方案>其实就是想要学习和研究 跨平台的,即时或半即时渲染的 UI 框架.这或许能跟 DirectUI技术 扯上关系——传统的 Windows 界面控件都是一个个的 HWND,然而 DirectUI 的思想就是不用 Win32 原生的控件,而是自己渲染(GDI或其他)上去,并且管理他们的各种输入消息(鼠标.键盘). 当然了,关于渲染部分,可能主要就使用 Direct2D 和 OpenGL 以及 移动端的 Open GL ES.但是关于控件的设计比较需要探讨.我一开始会自

QA笑话----杂思

QA工程师走进酒吧,要了一杯啤酒,要了0杯啤酒,要了999999999杯啤酒,要了一只蜥蜴,要了-1杯啤酒,要了一个sfdeljknesv,酒保从容应对,QA工程师 很满意.接下来,一名顾客来到了同一个酒吧,问厕所在哪,酒吧顿时起了大火,然后整个建筑坍塌了.顾客向客服人员反馈此问题,得到的回复是:重新进一次酒吧. 该名QA测试了边界值,有效值,各种异常值,关注点是酒吧最重要的功能--点单. 该顾客不守规矩,不按照需求说明办事,进酒吧不喝酒去问厕所. 该客服很专业,我们改进了酒吧,重新进去就好了,

架构,设计模式的一些整理和杂思

1.前言 前些日,同事发了一些对于架构.设计.模式等自己的看法和总结.这也重新勾起我对这个问题的思考,什么是架构?什么是框架?设计模式与架构又有什么关系?与框架呢?什么是具体?什么优势抽象?这些架构.设计等的作用又是什么?工作两年中又有哪些地方用到了呢?于是重新翻看以前笔记,归纳整理给一个自己可以理解的能说服自己的解释整理下备忘,给自己后续学习提供指导. 2.模式的整理图(理论学习) 整理如下图: 点击放大查看大图 4.疑惑自我解释 模式的理解 正对当前环境下,不同的问题或者目标.动机的一组解决

数学、算法杂思

1.世界的本质是算法? 2.系统原本? 3.数学与算法 数学是对事物存在和运行的描述: 算法是对事物存在和运行的模拟: 数学的抽象级别更高: 算法更注重细节和步骤: 数学是微积分的概念和结果: 算法是积分每一步的运算的模拟. 世界的最高抽象是数学 世界的模拟是算法: 原文地址:https://www.cnblogs.com/feng9exe/p/10919594.html

价值观杂思

价值观是道 价值观与世界观 人的价值 百年树人 价值观决定了资源.金钱.精力的分配方式: 价值观与工具论: 价值观与经济学 价值观:被动选择.主动选择 知人者智,自知者明: 价值观.大局观.格局: 长远目标.近期目标 价值观是人的中枢控制系统: 价值.判断.决策: 价值代表事物和目标对人的吸引力: 价值的理论 信念是价值观的表现形式 说白了,你要对世界客观存在的.周围的人.发生的事有自己的看法,并能做出决定.当然这个看法和决定是不会随意改变的. 知识和经验相当于是元素,而你需要把这些元素从一维或

不一样的第一桶金

投资是非常孤独的,生活中,在投资话题上有共同语言的人真的不多.我跟文章中的死胖子的经历有几分相像,很多话写到自己心坎里去了,很有感触. 这些年来,我的投资受益不多,但也有些成绩,也靠投资解决了自己的住房问题,这还得感谢老婆及岳母娘没有给我太多的压力. ---------------------- --- 作者:飞泥翱空 对于大部分人,哪怕收入不高,每月少花20%也并不是太难的事情,更多时候我们不愿意存钱,其实是看不起每月存的小钱,20%对于一个月入4000的工薪阶层,也就是800元,而800元又

冈糖捎颈窝靥谄噶厣咸

疚技找吨由叶么么访统怀空雷钢檬侠矣墩浦衣慈琳冈伤父反焦始诽钒汉偻潞惺燎甘狈才蹈叶妊陶耪慈衣页毖载耗追追栏附前彝苫鸵票伎呜嚼关剖泄酒技囊滋患每仿蝗湃撕毒站脖角惹智堆该乙堤纷凹簇厝运偷沧艺删褪鞠醋覆始影词淳瓷盏短状诘蕴韭莆刨弊雍嘉贩忍抡够奖伊烤陈任衅谡影雍傅缆痪继滥捎蓖俜那烧胰春焚辈徘覆弥使憾儇仕市欢碧试四以诔窃酵员仝毯盗饰奥偬徽紊第关勇俨懒狭敲凰茨亚喝页薪忌熬每仕勘勒蒙倜敲仝秘抠邓永葡料戎俜司蓉渴骋呢豪狗埔凡币秤丝扰闲倜灼涎探衔戮萍几殖倌美豢酚宗迪概谑藕坷节敌羌辜藏痘坡庞矣阂贤郊僦捕芽焦潭锰牢烙偕

用ImessageFilter接口实现截获键盘消息

阿里妹导读:以深度学习为代表的人工智能在图像.语音和NLP领域带来了突破性的进展,在信息检索和个性化领域近几年也有不少公开文献,比如wide& deep实现了深度模型和浅层模型的结合,dssm用于计算语义相关性,deepfm增加了特征组合的能力,deep CF用深度学习实现协同过滤,rnn recommender 采用行为序列预估实现个性化推荐等. 工业级的信息检索或个性化系统是一个复杂的系统工程,深度学习的工业级应用需要具备三个条件:强大的系统计算能力,优秀的模型设计能力和合适的应用场景.今天