Android学习笔记之TextView边框使用说明

 更新时间:2016年9月20日 19:59  点击:1654
在进行Android界面开发的时候,你想给TextView加个边框,找了半天发现没有这个属性,是不是有点蛋疼呢。下面就总结一下有哪些方法能够实现边框效果。

1.嵌套一层,利用内容的margin或者padding的留白加容器的背景来实现边框效果。

其实这个道理很简单,很早的时候那时候我们还用table做html页面布局的时候,我们就是使用cellspacing来实现table的边框的。现在我们也利用同样的想法来实现。

Android下实现边框效果 方案一

Android下实现边框效果 方案一

其中padding产生留白,就形成类似边框的效果。

<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="2px" android:background="#f00">
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello world!" android:background="#000"></TextView>
</LinearLayout>

当然内部的容器也是需要有颜色的,如果想实现内部透明的效果则需要将内部View的背景色跟背景的颜色保持一致,这是不太方便的地方。

2.使用9-patch(九宫格)的背景图片来实现边框效果。

做一个有边框的9-patch图片,作为要有边框的View的背景图即可。这样你还可以控制哪边有边框,哪边无边框,这种方法是比较好的一种方法,而且没有多余的View嵌套。另外你还可以实现圆角边框等效果。

Android下实现边框效果 方案二

Android下实现边框效果 方案二

如果你还不了解关于9-patch的内容,请移步。你需要做一个有边框的png图片,使用sdk的tools文件夹下的draw9patch.bat工具,你可以轻松生成9-patch图片。工具用起来很简单。左侧和顶部的线用于扩展重复显示的内容,右侧和底部的线用于控制内容显示的位置。在这里我要先感谢国家,我们现在已经可以自由的访问Android开发者站点。

3.利用shape的stroke来实现边框效果。

当然你可以使用shape中的stroke来实现border的效果。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <stroke android:width="1dp" android:color="#f00" />
</shape>

然后你可以引用这个shape作为背景就可以实现边框效果。关于更多关于shape的内容请移步。

最终的效果展示:

当然还有很多其他的变通方法,比如你也可以添加一个view把宽度设置为1dp,作为边框。这个就需要你在实际开发中变通使用了。

ndroid的应用被限制为最多占用16m的内存,至少在T-Mobile G1上是这样的(当然现在已经有几百兆的内存可以用了——译者注)。它包括电话本身占用的和开发者可以使用的两部分。即使你没有占用全部内存的打算,你也应该尽量少的使用内存,以免别的应用在运行的时候关闭你的应用。Android能在内存中保持的应用越多,用户在切换应用的时候就越快。作为我的一项工作,我仔细研究了Android应用的内存泄露问题,大多数情况下它们是由同一个错误引起的,那就是对一个上下文(Context)保持了长时间的引用。

在Android中,上下文(Context)被用作很多操作中,但是大部分是载入和访问资源。这就是所有的widget都会在它们的构造函数中接受一个上下文(Context)参数。在一个合格的Android应用中,你通常能够用到两种上下文(Context):活动(Activity)和应用(Application)。活动(Activity)通常被传递给需要上下文(Context)参数的类或者
方法:

 代码如下 复制代码

@Override

protected void onCreate(Bundle state) {

super.onCreate(state);

TextView label = new TextView(this);

label.setText("Leaks are bad");

setContentView(label);

}


这就意味着那个View有一个对整个活动(Activity)的引用并且对这个活动(Activity)中保持的所有对象有保持了引用;通常它们包括整个View的层次和它的所有资源。因此,如果你“泄露”了上下文(Context)(这里“泄露”的意思是你保持了一个引用并且组织GC收集它),你将造成大量的内存泄露。如果你不够小心的话,“泄露”一整个活动(Activity)是件非常简单的事情。

当屏幕的方向改变时系统会默认的销毁当前的活动(Activity)并且创建一个新的并且保持了它的状态。这样的结果就是Android会从资源中重新载入应用的UI。现在想象一下,你写了一个应用,有一个非常大的位图,并且你并不想在每次旋转时都重新载入。保留它并且每次旋转不重新加载的最简单的办法就是把它保存在一个静态字段上:

 代码如下 复制代码

private static Drawable sBackground;


@Override

protected void onCreate(Bundle state) {

super.onCreate(state);


TextView label = new TextView(this);


label.setText("Leaks are bad");

if (sBackground == null) {


sBackground = getDrawable(R.drawable.large_bitmap);


}

label.setBackgroundDrawable(sBackground);

setContentView(label);

}

这段代码非常快,同时也错的够离谱。它泄露了当第一次屏幕角度改变时创建的第一个活动(Activity)。当一个Drawable被附加到一个View,这个View被设置为drawable的一个回调。在上面的代码片断中,这意味着这个Drawable对TextView有一个引用,同时这个TextView对Activity(Context对象)保持着引用,同时这个Activity对很多对象又有引用(这个多少还要看你的代码了)。

这个例子是造成Context泄露的最简单的一个原因,你可以看一下我们在主屏幕源码(查看unbindDrawables()方法)中是通过在Activity销毁时设置保存过的Drawable的回调为空来解决这个问题的。更为有趣的是,你可以创建一个context泄露的链,当然这非常的糟糕。它们可以让你飞快的用光所有的内存。

有两种简单的方法可以避免与context相关的内存泄露。最明显的一个就是避免在context的自身的范围外使用它。上面的例子展示了在类内部的一个静态的引用和它们对外部类的间接引用是非常危险的。第二个解决方案就是使用Application Context。这个context会伴随你的应用而存在,并且不依赖Activity的的生命周期。如果你计划保持一个需要context的长生命周期的对象,请记得考虑Application对象。你可以非常方便的通过调用Context.getApplicationContext() 或者 Activity.getApplication()获取它。

总之,为了避免涉及到context的内存泄露,请记住如下几点:

1.不要对一个Activity Context保持长生命周期的引用(一个对Activity的引用应该与Activity自身的生命周期相同)
2.尝试使用应用上下文(context-application)代替活动上下文(context-activity)
3.如果你不能控制它们的生命周期,在活动(Activity)中避免使用不是静态的内部类,使用静态类并且使用弱引用到活动(Activity)的内部。对于这个问题的解决方法是使用静态的内部类与一个弱引用(WeakReference)的外部类。就像ViewRoot和它的W内部类那么实现的。
4.垃圾回收器对于内存泄露来说并不是百分百保险的。

本文章来给大家介绍android 对话框弹出位置和透明度详解,有需要的同学可参考,本文章总结了各种在安卓开发中话框弹透明实现方法,各位同学可参考。


分析

1、调整对话框后面的背景的透明度

2、将对话框头部去掉

3、将对话框自身的圆角白色边框替换为直角5px的白色边框

4、设置对话框内部背景。

 

先来看一个效果

AlertDialog dialog = new AlertDialog.Builder(this).setTitle("title")
.setMessage("message").create();
Window window = alertDialog.getWindow();
window.setGravity(Gravity.TOP); //window.setGravity(Gravity.BOTTOM);
alertDialog.show();


透明的对话框
默认显示的对话框是不透明的,但我们可以通过设置对话框的alpha值将其变成透明或半透明效果。我们都知道。颜色由R(红)、G(绿)、B(蓝)组成。除此之外,还会有一个A(透明度,Alpha)来描述颜色。在颜色的描述中,如果该值为0表示完全透明,如果该值为255,表示不透明。
通过设置Windows的alpha属性也可以设置对话框的透明度。但alpha的取值范围是从0到1.0。如果该属性值为0,表示完全透明,如果该值为1.0,表示不透明(也就是正常显示的对话框)。下面的代码通过将alpha的值设为0.3,为了更清晰地显示透明的对话框和非透明的对话框。在本例中加了一个背景图像,将同时显示了两个对话框(一个是半透明的,另一是不透明的)。


复制代码 代码如下:
// 显示透明的对话框
AlertDialog alertDialog = new AlertDialog.Builder(this).setMessage(
"透明对话框").setPositiveButton("确定", null).create();
Window window = alertDialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
// 设置透明度为0.3
lp.alpha = 0.6f;
window.setAttributes(lp);
alertDialog.show();

 


我们在使用某些应用时会发现当弹出对话框或某些模式窗口时,后面的内容会变得模糊或不清楚。实际上,这些效果也很容易在OPhone中实现。为了实现这个功能,我们只需要设置Wndow对象的两个标志即可,代码如下:

 


去掉白边框

设置style,

    <style name="myDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
<!–        <item name="android:background">@drawable/bg_sel</item>–>
        <item name="android:windowBackground">@drawable/bg_sel</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>

将此style方在构造方法中。

4、设置对话框内部背景,

自定义一个dialog模板视图,里面只有两个linearlayout,所有的View都添加到里面的linearlayout中即可。

如下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:padding="5px">
    <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:id="@+id/linearLayout" android:background="#90333333"/>
</LinearLayout>

实现由下至上弹出并位于屏幕底部的提示框:

1. button.setOnClickListener(new OnClickListener() {
2.@Override 3.public void onClick(View arg0) { 4. // TODO Auto-generated method stub 5. AlertDialog dialog = new AlertDialog.Builder(TestAndroid1Activity.this) 6. .setTitle("title").setMessage("message").create(); 7. Window window = dialog.getWindow();
8. window.setGravity(Gravity.BOTTOM); //此处可以设置dialog显示的位置 9. window.setWindowAnimations(R.style.mystyle); //添加动画 10. dialog.show();
11.}
12.);
styles.xml

1.<?xml version="1.0" encoding="utf-8"?>
2.<resources>
3.
4. <style name="mystyle" parent="android:Animation"> 5. <item name="@android:windowEnterAnimation">@anim/dialog_enter</item> //进入时的动画 6. <item name="@android:windowExitAnimation">@anim/dialog_exit</item> //退出时的动画 7. </style>
8.</resources>

位于 res/anim/dialog_enter.xml

1.<?xml version="1.0" encoding="utf-8"?>
2.<set xmlns:android="http://schemas.android.com/apk/res/android"> 3.
4. <translate
5. android:fromYDelta="100%p" %p指相对于父容器 6. android:duration="600" 7. />
8.</set>
位于 res/anim/dialog_exit.xml

1.<?xml version="1.0" encoding="utf-8"?>
2.<set xmlns:android="http://schemas.android.com/apk/res/android"> 3.
4. <translate
5. android:toYDelta="100%p" 6. android:duration="600" //持续时间 7. />
8.</set>
此处只是做了垂直位移的效果,自己还可以试试别的效果。

<alpha /> 透明度

<rotate /> 旋转

<scale /> 缩放

在WAP开发的朋友可能会碰到过如果我们使用html标准来写网站不会自动适应手机屏幕了,会留很多的空,那么要怎么手机网站宽度自动适应手机屏幕呢,下面大家看看。

方法一:

 代码如下 复制代码

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" /> 

在网页的<head>中增加以上这句话,可以让网页的宽度自动适应手机屏幕的宽度。

其中:

width=device-width :表示宽度是设备屏幕的宽度

initial-scale=1.0:表示初始的缩放比例

minimum-scale=0.5:表示最小的缩放比例

maximum-scale=2.0:表示最大的缩放比例

user-scalable=yes:表示用户是否可以调整缩放比例


如果是想要一打开网页,则自动以原始比例显示,并且不允许用户修改的话,则是:

 代码如下 复制代码

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 

方法二:

把这段

<!DOCTYPE ........>替换为这段

<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">注:此方法在iPhone下横屏时宽度会超过屏幕宽度出现滚动条,解决方法就是加上方法一的代码

最近准备学android开发,我们尝试来安装android sdk,但是很不好,安装是提示找不到JDK了,我的系统是 64位的 Win7,已经装了 jdk-6u23-windows-x64.exe 了,但安装 Android SDK 的时候报错,说找不到系统安装的 JDK,该怎么办呢?

错误提示:

Can also create symbolic link if you don't want to copy the files. (requires administrator privileges):
mklink C:/Windows/SysWOW64/java.exe C:/Windows/System32/java.exe

mklink C:/Windows/SysWOW64/javaw.exe C:/Windows/System32/javaw.exe

右击桌面的“计算机”,选择“属性”(也可在控制面板中打开“系统”),选择“高级系统设置”,在“系统属性”下中,选择“高级”页面里的“环境变量”。

2013161855256907.jpg 

在系统环境变量中找到JAVA_HOME的变量,没有请新建一个JAVA_HOME项,将设置 JAVA_HOME 变量的值为

 代码如下 复制代码
C:/Program Files/Java/jdk1.7.0_10

,这是JDK的安装路径,根据自己安装路径和版本的请自己修改。
然后再新建或者修改下面几个变量值:
将 CLASSPATH 变量 设置值为:

 代码如下 复制代码

.;%JAVA_HOME%/lib;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar

将 PATH 变量 值 在原有值的末尾加上英文半角的分号 ; 然后加上

 代码如下 复制代码
C:/Program Files/Java/jdk1.7.0_10/bin

这个值同样请根据自己安装路径和版本的不同自行修改

 

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • Smarty模板学习笔记之Smarty简介

    1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • C#通过重写Panel改变边框颜色与宽度的方法

    这篇文章主要介绍了C#通过重写Panel改变边框颜色与宽度的方法,涉及C#针对Panel控件的重写与属性设置技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20