android 学习中遇到的问题及解决方法

1、手势监听

关于手势监听,具体过程为:

(1)实现一个OnGestureListener的接口并覆写其中的方法;

(2)实例化一个GestureDetector对象,并将(1)中的接口传入;

(3)将要监听手势动作的View绑定到onTouchListener(),并返回GestureDetector的.onTouchEvent方法;

过程如下:

mView.setOnTouchListener(new OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
       // TODO Auto-generated method stub

       return gestureDetector.onTouchEvent(event);
  }
});

遇到的问题:

应用中我将一个layout绑定手势监听滑动,但发现实际并不响应,输出发现gestureDetector.onTouchEvent(event)返回的是false,也就是说gestureDetector没有捕捉到响应的手势。

解决办法:

在layout的设置中添加属性android:longClickable="true"。

原因分析:

该属性的默认值应该是false,即只能响应简单的手势状态,对于复杂的手势动作不能判断,因此造成以上的问题。


2 主题设置

android中可以通过对activity主题进行设置,可以得到一些特殊的效果,如背景透明、无标题、全屏等,android本身提供了一些主题供开发者选择,具体方法即在manifest文件中相应的<activity>标签下添加android:theme="@android:style/..."即可。,如果要自定义主题,需要在res/values目录下添加style.xml文件,在其中定义所需的属性。

遇到的问题:

应用中需要将一个activity的背景设置为半透明效果,但系统本身提供的选择只有全透明效果,因此需要自定义。

定义activity背景色 <item name="windowBackground">#99cccccc</item>,这样写会报出两种错误,

(1) No resource found that matches the given name: attr 'windowBackground',即指定的name找不到,这条有时候会通过,但背景不会改变,是漆黑的一片。

(2) Color types not allowed (at 'android:windowBackground' with value '#99cccccc'),即对color不能这么写

解决办法:

<item name="android:windowBackground">@color/transparent_background</item>

即name里要添加android:,color要专门在colors.xml文件中具体定义

分析:

 <item name="windowBackground">这种写法是在仿照系统api中的style写的,在目录\android-sdk\platforms\android-8\data\res\values下的themes.xml文件是系统定义的各种主题属性,例如

<!-- Window attributes -->
        <item name="windowBackground">@android:drawable/screen_background_dark</item>
        <item name="windowFrame">@null</item>
        <item name="windowNoTitle">false</item>
        <item name="windowFullscreen">false</item>
        <item name="windowIsFloating">false</item>
        <item name="windowContentOverlay">@android:drawable/title_bar_shadow</item>
        <item name="windowShowWallpaper">false</item>
        <item name="windowTitleStyle">@android:style/WindowTitle</item>
        <item name="windowTitleSize">25dip</item>
        <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Activity</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>

不知道为什么系统文件就没有问题。。。总之自定义的话对这些属性值的name需添加android:,形如<item name="android:windowBackground">


3 javah的用法

在JNI的调用中当写好java代码后需要用javah生成相应的.h头文件。

遇到的问题:在网上找了很多方法,但都会报找不到类文件的错误,形如

错误:无法访问 com.xf.Jni.NativeJni
未找到 com.xf.Jni.NativeJni 的类文件
javadoc: 错误 - 找不到类 com.xf.Jni.NativeJni。
Error: 未在命令行中指定任何类。请尝试使用 -help。

现将使用方法整理如下(windows环境):

首先,javah的用法:javah [选项] <类>

其中 [选项] 包括:       

-help                 输出此帮助消息并退出
-classpath <路径>     用于装入类的路径
-bootclasspath <路径> 用于装入引导类的路径
-d <目录>             输出目录
-o <文件>             输出文件(只能使用 -d 或 -o 中的一个)
-jni                  生成 JNI样式的头文件(默认)
-version              输出版本信息
-verbose              启用详细输出
-force                始终写入输出文件

使用全限定名称指定 <类>(例如,java.lang.Object)。

其中-classpath、-d是必须的,-classpath指定文件路径;-d指定输出路径,也就是头文件的输出路径(可以使任意的);-jni指定转换文件的类名,需包含完整包名。

(1)使用javah命令需生成***.class文件,用eclipse开发android应用时会自动在工程文件夹的bin目录下生成,所以不需要自己再动手生成;

(2)-classpath需指定为.class文件所在包的前一级目录

我的例子 C:\Users\xf>javah -classpath D:\ProgAndroid\android_workspace\JNITest\bin\classes

-d D:\ProgAndroid\android_workspace\JNITest -jni com.xf.jnitest.JniNative


4 java ServerSocket

用serverSocket的时候总是报这样的错:

java.net.SocketException: select failed
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(Unknown Source)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)

原因:软件端口冲突;

解决办法:重置winsock, 在cmd中输入netsh winsock reset
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值