安卓杂思
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基类,处理这些共通问题,也就是第一种。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。