Android 解决RadioGroup显示在输入法窗口上面的问题

 更新时间:2016年10月2日 16:23  点击:2321
下面我们来看一篇Android 解决RadioGroup显示在输入法窗口上面的问题,希望这篇教程能够为各位带来帮助,具体的步骤细节如下文介绍

如果你在开发过程中经常使用 RadioGroup,那你是否遇到过下面这种情况

S60808-164645

每当你点击EditText弹出输入法时,RadioGroup总是向上移动到输入法的上面。

你可能会想到需要给RadioGroup添加下面这条属性:

android:layout_alignParentBottom="true"
但当你打开xml文件时,很尴尬的发现这个属性已经加上了,那要怎么解决这个小bug呢?

其实很简单,只需要在AndroidManifest.xml文件里给当前类的注册信息中添加一个属性:

android:windowSoftInputMode="adjustNothing"
写法如下:

<activity
    android:name=".activity.MainActivity"
    android:windowSoftInputMode="adjustNothing"/>
或者是在该Activity的onCreate()方法里添加:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
下面是效果图:

S60808-164708

你们可能要问,为什么加上这句代码就可以解决这个问题了,这就要说一下windowSoftInputMode这个属性了。

首先,我们从这个属性的名称中,可以很直观的看出它的作用,这个属性就是来设置窗口软键盘的交互模式的。

windowSoftInputMode一共有以下10个值可选:

1.adjustNothing:窗口不做调整

2.adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分(软键盘会遮挡屏幕)

3.adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间(可以显示全部屏幕)

4.adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示

5.stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的

6.stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态

7.stateHidden:用户选择activity时,软键盘总是被隐藏

8.stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

9.sstateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置

10.stateVisible:软键盘通常是可见的

下面我们来看一篇关于Swift读取App版本信息 和 PCH 文件的例子,希望这个例子能够对各位有帮助。

 

Swift读取App版本信息

有时间我们需要读取APP的版本信息之类的配置信息,这样的我们可以使用方法:NSBundle.mainBundle().infoDictionary 来获取

Example:
Swift
let infoDictionary = NSBundle.mainBundle().infoDictionary
let shortVersion = infoDictionary!["CFBundleShortVersionString"]
print(shortVersion!)
PCH 文件

PCH文件命名:

一般以项目名称命名,即项目名称是什么,pch文件也叫什么名字。

PCH原理:

PCH文件里面的内容被项目的所有文件共有。

PCH Tips:

1.pch需要提前编译,在工程文件中,找到Build Setting,选择All选项,中找到 Apple LLVM 1.7 – Language集合下的 : Precompile Prefix Header 设置为 Yes ,然后 Prefix Header 选项中写入pch文件的绝对路径,

2.找到Swift Compiler – Code Generation 集合,从中配置Objectie-C的桥接文件:Objective-C Bridging Header ,写入相同的pch文件路径

3.在xcode中按Command+B编译一下
PCH文件作用:
Swift
/*
    首选判断当前有没有C文件,如果有C就不导入OC的语法
    每一个OC文件头部默认都会定义__OBJC__这个宏
*/
#ifdef __OBJC__
/**
 1.存放一些公用的宏
 */
#define PERSIMMON "Mr.Cong"
/**
 2.存放一些公用的头文件
  */
#import "UIImage+Test.h"
/**
 3.自定义一些调试用的NSLog(输出日志)
 ... 表示在宏里面的可变参数
 __VA_ARGS__ 表示函数里面的可变参数
 */
#ifdef DEBUG
#define TLog(...) NSLog(__VA_ARGS__)
#else
#define TLog(...)
#endif

#endif

PCH弊端;

1.每次都需要提前编译
2.需要做一些判断,判断当前有没有C文件,如果有C就不导入OC的语法

下面我们来看一篇关于Android开发使用Netty的TCP连接中使用SSL加密的例子,希望这篇文章能够对各位有所帮助,具体的如下文介绍。

 

1 Introduction
 
数据安全在网络通信中是非常重要的一个方面。为了支持 SSL/TLS,Java 提供了 javax.net.ssl包下的类SslContext 和 SslEngine 。在Netty框架下,I/O数据在ChannelPipeline中被管道中的ChannelHandler处理并转发给下一个ChannelHandler。自然而然地,Netty也提供了ChannelHandler的实现SslHandler来支持SSL, 有一个内部 SslEngine 做实际的工作。
 
2 Steps
 
首先看看SslHandler的构造函数:
   public SslHandler(SSLEngine engine) {
        this(engine, false);
    }

    public SslHandler(SSLEngine engine, boolean startTls) {
        this(engine, startTls, ImmediateExecutor.INSTANCE);
    }
不难发现,我们需要一个SSLEngine对象来构建SslHandler。根据资料可以知道,需要根据已初始化的 SSLContext 来调用 SSLContext.createSSLEngine() 即可创建 SSLEngine。
所以基于Netty框架的在TCP连接中使用SSL/TLS加密的流程如下:
 1.在代码中导入证书,并使用该证书构造SSLContext
2.调用SSLContext对象的createSSLEngine()创建 SSLEngine
3.用SSLEngine对象去初始化Netty的SslHandler
4.在Netty的ChannelInitializer.initChannel()中,往管道(pipeline)中安装SslHandler。
 
3 Usage
 
3.1 导入证书
 public SSLContext getClientSSLContext(){
  KeyStore trustKeyStore= KeyStore.getInstance("JKS");// 访问Java密钥库,JKS是keytool创建的Java密钥库
  InputStream keyStream = MyApplication.getAppContext().getAssets().open("key.jks");//打开证书文件(.jks格式)
  char keyStorePass[]="12345678".toCharArray();  //证书密码
  keyStore .load(trustKeyStore,keyStorePass);


  TrustManagerFactory trustManagerFactory =   TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore );//保存服务端的授权证书

SSLContext   clientContext = SSLContext.getInstance( "TLS");
  clientContext.init(null, trustManagerFactory.getTrustManagers(), null);

  return clientContext;
}
在上述代码,只是实现了client采用trustKeyStore中的key.jks证书(包含了server的公钥)对数据解密,如果解密成功,证明消息来自server,进行逻辑处理。
仅仅是server->client单向的SSL认证。
如果要实现server和client之间双向的身份认证,需要模仿trustManagerFactory的初始化来构建一个KeyManagerFactory来其中保存客户端的私钥,并传入
clientContext.init(kmf.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);

具体参照 SSL双向认证java实现
 
3.2 添加 SslHandler
 
ChannelHandler在应该初始化(ChannelInitializer.initChannel()被调用时)阶段被安装在ChannelPipeline中。
 

Bootstrap的介绍参考Android开发之使用Netty进行Socket编程(二)
Boostrap的初始化参考Android开发之使用Netty进行Socket编程(三)
   bootstrap.handler(new ChannelInitializer<SocketChannel>() {
            @Override
            protected void initChannel(SocketChannel ch) throws Exception {
                ChannelPipeline pipeline = ch.pipeline();
                SSLEngine engine = getClientSSLContext().createSSLEngine();
                engine.setUseClientMode(true);
                pipeline.addFirst("ssl", new SslHandler(engine));

                //....再添加其他的ChannelHandler
                pipeline.addLast(nettyChannelHandler);
            }
        });
在大多数情况下,SslHandler 将成为 ChannelPipeline 中的第一个 ChannelHandler,所以调用了pipeline.addFirst() 。这将确保所有其他 ChannelHandler 应用他们的逻辑到数据后加密后才发生,从而确保他们的变化是安全的

下面我们来看一篇关于Android设置viewGroup和其子控件两者之间的焦点关系的例子,希望文章能够让各位了解到viewGroup和其子控件两者之间的关系哦。

在开发过程中,你可能会遇到这样的问题:在一个很长的界面刚初始化结束的时候默认不是最顶部而是某一个控件,比如ListView;也可能遇到Edittext自己弹出软键盘的问题等等。其实这些都是焦点获取的问题,不想有这样的小bug那么就要对焦点的获取问题进行合理的控制。大多数人会在初始化的时候就对某个控件添加这个属性:

×××.setFocusable(false);

其实在建立xml布局文件的时候Android就提供了焦点控制的属性:

android:descendantFocusability="blocksDescendants"

解释一下相应的属性和对应的表达。

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:


beforeDescendants:viewgroup会优先其子类控件而获取到焦点
 
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
 
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

[!--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
  • C# Winform中实现主窗口打开登录窗口关闭的方法

    这篇文章主要介绍了C# Winform中实现主窗口打开登录窗口关闭的方法,这在需要用户名密码的软件项目中是必用的一个技巧,要的朋友可以参考下...2020-06-25
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • 详解C#切换窗口

    最近项目不多忙,于是抽点时间巩固下切换窗口问题,感兴趣的朋友跟着小编一起学习吧...2020-06-25
  • Element图表初始大小及窗口自适应实现

    这篇文章主要介绍了Element图表初始大小及窗口自适应实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-10
  • Android 实现钉钉自动打卡功能

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

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • C#中添加窗口的步骤详解

    下面小编就为大家带来一篇C#中添加窗口的步骤详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

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