android AutoCompleteTextView如何设置下拉框每个条目的内容因过长而显示不全的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android AutoCompleteTextView如何设置下拉框每个条目的内容因过长而显示不全的问题相关的知识,希望对你有一定的参考价值。

参考技术A 自己复写下拉的adapter
然后在adapter中加载自己的layout
然后设置layout中TextView为显示不全时滚动本回答被提问者采纳
参考技术B 解决方案:
自己复写下拉的adapter
然后在adapter中加载自己的layout
然后设置layout中TextView为显示不全时滚动
参考技术C   复写下拉的adapter
  然后在adapter中加载自己的layout
  然后设置layout中TextView为显示不全时滚动

Android逆向系列文章— Android基础逆向

本文作者:HAI_

0×00 前言

不知所以然,请看

Android逆向-Android基础逆向(1)

Android逆向-Android基础逆向(2)

Android逆向-Android基础逆向(2-2)

Android逆向-Android基础逆向(2-3补充篇)

Android逆向-Android基础逆向(3)

Android逆向-Android基础逆向(4)

Android逆向-Android基础逆向(4-2)

Android逆向-Android基础逆向(5)

以及java系列:

Android逆向-java代码基础(1)

Android逆向-java代码基础(2)

Android逆向-java代码基础(3)

Android逆向-java代码基础(4)

Android逆向-java代码基础(5)

Android逆向-java代码基础(6)

Android逆向-java代码基础(7)

Android逆向-java代码基础(8)

内容or问题

1.如何写一个登录界面? √
2.逆向分析登录逻辑 √
3.如何暴力绕过一个登录界面? √
4.如何巧妙登录 √
5..如何加广告√
6.如何去广告
7.实例分析

时间

2018年2月4日13:10:42

目的

1.复习登录界面的书写
2.暴力练习
3.获取练习
4.smali代码熟练
5.给自己的app加广告
6.二次打包加广告实战
7.如何去广告

0×01 Android 编程—登录界面

说明

这个是学编程的时候必须要学的,这次我们就不接数据库来操作。也没有注册界面,直接就是一个简单的登录界面。
demo还是按照之前的改。恩,反正我会,我就要偷懒。

1.更改布局

首先一个用户名的框框。
1.jpg

然后一个登录密码的框框。

2.jpg

然后还是一个登录按钮

3.jpg

预览一下我们的界面

4.jpg

好丑,做一个简单的调整,整体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.hanlei.first_demo.MainActivity">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/name"
        android:hint="请输入用户名"
    />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/password"
        android:hint="请输入密码"
        />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bt"
        android:text="Login"/>
</LinearLayout>

5.jpg

2.绑定控件

恩,为了像一个登录界面,我把name也改了。

所以重新绑定。

6.jpg

3.逻辑书写

  login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (name.getText().toString().equals("zhuzhu")&&Integer.parseInt(ps.getText().toString())==520)
                {
                    startActivity(new Intent(MainActivity.this,Main2Activity.class));
                }
            }
        });

这里涉及到一个知识点。
java String 类型如何转换为int类型。
简单的来说:

Integer.parseInt();

就可以转换了
这里突然想到万一不输入数字怎么办。恩,去改下规范。

 <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/password"
        android:inputType="number"
        android:hint="请输入密码"
        />

这里加了一行只允许输入数字。

测试

7.jpg

0×02 反编译分析

分析嘛,很多次了。老规矩

1. Android Killer

8.jpg

2.找到主要函数

我们找到逻辑判断的地方$1

.class Lcom/example/hanlei/first_demo/MainActivity$1;
.super Ljava/lang/Object;
.source "MainActivity.java"

# interfaces
.implements Landroid/view/View$OnClickListener;

# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
    value = Lcom/example/hanlei/first_demo/MainActivity;->onCreate(Landroid/os/Bundle ;) V

.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = null
.end annotation

# instance fields
.field final synthetic this$0:Lcom/example/hanlei/first_demo/MainActivity;

# direct methods
.method constructor <init>(Lcom/example/hanlei/first_demo/MainActivity ;) V

    .locals 0
    .param p1, "this$0"    # Lcom/example/hanlei/first_demo/MainActivity;

    .prologue
    .line 24
    iput-object p1, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

# virtual methods
.method public onClick(Landroid/view/View ;) V

    .locals 4
    .param p1, "v"    # Landroid/view/View;

    .prologue
    .line 27
    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->name:Landroid/widget/EditText;
    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity ;) Landroid/widget/EditText
;

    move-result-object v0

    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;

    move-result-object v0

    const-string v1, "zhuzhu"

    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object ;) Z


    move-result v0

    if-eqz v0, :cond_0

    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText;
    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity ;) Landroid/widget/EditText
;

    move-result-object v0

    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String ;) I


    move-result v0

    const/16 v1, 0x208

    if-ne v0, v1, :cond_0

    .line 29
    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    new-instance v1, Landroid/content/Intent;

    iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    const-class v3, Lcom/example/hanlei/first_demo/Main2Activity;

    invoke-direct {v1, v2, v3}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class ;) V


    invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent ;) V


    .line 31
    :cond_0
    return-void
.end method

3.重点逻辑部分

重点逻辑就是如何判断登录的部分

if-eqz v0, :cond_0

    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText;
    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity ;) Landroid/widget/EditText
;

    move-result-object v0

    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String ;) I


    move-result v0

    const/16 v1, 0x208

    if-ne v0, v1, :cond_0

    .line 29
    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    new-instance v1, Landroid/content/Intent;

    iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    const-class v3, Lcom/example/hanlei/first_demo/Main2Activity;

    invoke-direct {v1, v2, v3}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class ;) V


    invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent ;) V

我们看到了两个if语言
整个逻辑就是先进行一个判断,然后进行另外一个判断。就是满足第一个if语句,然后满足第二个if语句才到结束。
这些smali代码就是我们之前分析过很多次的语句,没有什么难的地方,都很简单的。

0×03 暴力美学

我们来尝试破解。

方法 1

思路

既然有if语句进行判断,那我把if语句删了。编程现在这个样子:

invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity ;) Landroid/widget/EditText
;

    move-result-object v0

    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录