安卓杂思

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基类,处理这些共通问题,也就是第一种。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。