网友通过本文主要向大家介绍了android面试技巧,android开发技巧,android studio技巧,android布局技巧,android开发小技巧等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
android 编程小技巧(持续中)
first:</div> Intent跳转一般存用于Activity类,但是若要在非activity类里跳转的话,解决方法是在startActivity(intent)前加mContext即上下文,最终为:mContext.startActivity(intent); 换言之,以后在非activity类里调用activity的方法 一律这么做。若不行的话 可以这么做:(Activity)mContext。</div> </div>second:</div> gridview中textview内容不能居中的问题。gridview中可以设置一行显示多少个item,所以他为每个item都预留了一部分空间。若用textview来填充item 而textview的属性又为wrap_content时,因为内容较少,只占据了分配空间的一部分,所以无论怎么去调试属性,看上去都像是顶格显示;故解决方法是让textview的宽度为marth_parent,这样grity = "centre"才会有:-D。</div> </div>
third: Scrollview下面只能嵌套一个控件,当有多个控件时可以在Scrollview里套上一个Relativelayout 就可以就解决问题。</div>
forth: Android SDK Content load很慢解决方法 在C:\Documents and Settings\计算机名 这个路径下有个.android文件夹, 把这个文件夹删了 然后重启模拟器 会弹出一个对话框 Welcome to Android Development 选择NO就可以了</div> </div>
five:</div> 在多层嵌套时 若层数过多会出现 明明控件的visibilty是visible 但在界面上仍是不可见的情况 貌似相当的诡异 解决方法:多个布局换着用 不要一直用linearlayout 可以套一个relativelayout。原因不明</div> </div>
six:</div> 若activity里的某些响应时基于adapter数据的 而adapter又与activity分开 使得数据无法回传到activity(具体见Listview与GridView预留数据接口一文) 解决方法如下:</div> 一般来说adapter是由activity调用的 需要传入activity的activity listdata等等信息 所以 我们在就收数据时 把activity方法得到 见代码:</div> </div> QYSPActivity activty; //调用这个adapter的activity类</div> </div> </div> super(activity, 0, listdata);</div> activty = (QYSPActivity) activity; // 获取activity的类</div> }</div> </div> </div> 在需要的地方调用activity里的方法</div> activty.doPost(XXXXX); //doPost()是在activity里定义好的方法 public</div> </div> </div> 记住了 取名字的时候不要取activity因为这个名字与(QYSPActivity)activity一样,然后获得的activity方法就是空的 然后 然后 各种error 解决方法 换名字或者 this.activity =(QYSPActivity) activity; 说白了 就是this. 语句 伤不起~~</div> 目测这个方法可以举一反三 但是怎么反 待定。。。</div>
seven:</div> setContentView和inflate区别 setContentView()一旦调用, layout就会立刻显示UI;而inflate只会把Layout形成一个以view类实现成的对象,有需要时再用setContentView(view)显示出来 .一般在activity中通过setContentView()将界面显示出来,但是如果在非activity中如何对控件布局设置操作了,这需LayoutInflater动态加载</div>
eight: </div> 动态删除listview的item
nine:</div> 使用contentView+静态类ViewHolder类来优化adapter 当我们判断convertView==null的时候,如果为空,就会根据设计好的List的Item布局(XML),来为convertView赋值,并生成一个viewHolder来绑定converView里面的各个View控件(XML布局里面的那些控件)。再用convertView的setTag将viewHolder设置到Tag中,以便系统第二次绘制ListView时从Tag中取出。(看下面代码中) </div> ViewHolder holder;</div>
if(convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.list_item, null); holder.img = (ImageView)convertView.findViewById(R.id.img); holder.title = (TextView)convertView.findViewById(R.id.title); holder.info = (TextView)convertView.findViewById(R.id.info); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); holder.img.setImageResource(R.drawable.ic_launcher); holder.title.setText("loulijun"); holder.info.setText("www.cnblogs.com/loulijun"); }
eleven: 单个控件的xml不能放缩问题</div> 其实这里不管你将Button的layout_width和layout_height的值修改成多少,都不会有任何效果的,因为这两个值现在已经完全失去了作用。平时我们经常使用layout_width和layout_height来设置View的大小,并且一直都能正常工作,就好像这两个属性确实是用于设置View的大小的。而实际上则不然,它们其实是用于设置View在布局中的大小的,也就是说,首先View必须存在于一个布局中,之后如果将layout_width设置成match_parent表示让View的宽度填充满布局,如果设置成wrap_content表示让View的宽度刚好可以包含其内容,如果设置成具体的数值则View的宽度会变成相应的数值。这也是为什么这两个属性叫作layout_width和layout_height,而不是width和height。</div> </div> 再来看一下我们的button_layout.xml吧,很明显Button这个控件目前不存在于任何布局当中,所以layout_width和layout_height这两个属性理所当然没有任何作用。那么怎样修改才能让按钮的大小改变呢?解决方法其实有很多种,最简单的方式就是在Button的外面再嵌套一层布局. 当然这个时候最外层的布局失去作用了。</div>
ten:throw与throws的区别 throw语句用在方法体内,表示抛出异常,由方法体内的语句处理</div> throws语句用在方法声明后面,表示再抛出异常,由调用这个方法的上一级方法中的语句来处理</div> throws主要是声明这个方法会抛出这种类型的异常,使其他地方调用它时知道要捕获这个异常。</div> throw是具体向外抛异常的动作,所以它是抛出一个异常实例。</div> throws说明你有哪个可能,倾向</div> throw的话,那就是你把那个倾向变成真实的了同时:</div> 1)throws出现在方法函数头;而throw出现在函数体;</div> 2)throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常;</div> 3)两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。</div>
twelve:gravity与 layout_gravity</div> android:gravity:是对view控件本身来说的,是用来设置view本身的文本应该显示在view的什么位置,默认值是左侧</div> android:layout_gravity:是相对于包含改元素的父元素来说的,设置该元素在父元素的什么位置</div> 对于LinearLayout如果设置android:orientation="vertical",那么android:layout_gravity的设置只在水平方向生效;如果设置android:orientation="horizontal",那么android:layout_gravity属性只在垂直方向生效。</div> </div> </div>
thirteen:带删除按钮及功能的输入框</div> </div> * 因为我们不能直接给EditText设置点击事件,所以我们用记住我们按下的位置来模拟点击事件</div> * 当我们按下的位置 在 EditText的宽度 - 图标到控件右边的间距 - 图标的宽度 和</div> * EditText的宽度 - 图标到控件右边的间距之间我们就算点击了图标,竖直方向没有考虑</div> 这三行话 是关键。</div>
</div> 代码如下:</div> boolean touchable = event.getX() > (getWidth()</div> - getPaddingRight() - mClearDrawable.getIntrinsicWidth())</div> && (event.getX() < ((getWidth() - getPaddingRight())));//mClearDrawable为删除按钮</div> if (touchable) {</div> this.setText("");</div> }</div> </div> 在输入框中添加删除按钮</div>
forteen:open failed: EISDIR (Is a directory) </div> 在SD卡中创建目录文件夹的时候,应该一层一层的创建文件夹,但是不能一次同时创建这两个文件夹.容易把具体创建的文件当作要创建的空文件夹来创建。将"/mnt/sdcard/zhufu/apkbus.db"当作文件夹来创建,这样就会出现EISDIR错误,解决方法:先创建前面的文件夹,在创建最终文件。</div> 如:File parentFile = new File(path);</div> if (!pa