如何在Android中移动验证消息或密码

急速的3642

如果您查看图片,则可以看到验证图标正在干扰passwordToggle图标。有没有办法移动验证图标或passwordToggle图标?

覆盖

RegisterActivity

public class RegisterActivity extends AppCompatActivity {
    private static final String TAG = "RegisterActivity";

    @InjectView(R.id.input_name) EditText _nameText;
    @InjectView(R.id.input_email) EditText _emailText;
    @InjectView(R.id.input_password) EditText _passwordText;
    @InjectView(R.id.input_confirmPassword) EditText _confirmPasswordText;
    @InjectView(R.id.btn_signup) Button _signupButton;
    @InjectView(R.id.link_login) TextView _loginLink;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        ButterKnife.inject(this);

        _signupButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signup();
            }
        });

        _loginLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Finish the registration screen and return to the Login activity
                finish();
            }
        });
    }

    public void signup() {
        Log.d(TAG, "Begin Signup process...");

        if (!validate()) {
            onSignupFailed();
            return;
        }

        _signupButton.setEnabled(false);

        final ProgressDialog signupProgressDialog = new ProgressDialog(RegisterActivity.this,
                R.style.Theme_IAPTheme);
        signupProgressDialog.setIndeterminate(true);
        signupProgressDialog.setMessage("Creating Account...");
        signupProgressDialog.show();

        String name = _nameText.getText().toString();
        String email = _emailText.getText().toString();
        String password = _passwordText.getText().toString();
        String confirmPassword = _confirmPasswordText.getText().toString();

        // TODO: Implement your own signup logic here.

        Response.Listener<String> responseListener = new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    Log.i("tagconvertstr", "["+response+"]");
                    JSONObject jsonResponse = new JSONObject(response);
                    boolean success = jsonResponse.getBoolean("success");
                    if (success) {
                        onSignupSuccess();
                    } else {
                        onSignupFailed();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        };

        RegisterRequest registerRequest = new RegisterRequest(name, email, password, responseListener);
        RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
        queue.add(registerRequest);

        /*new android.os.Handler().postDelayed(
                new Runnable() {
                    public void run() {

                        // On complete call either onSignupSuccess or onSignupFailed
                        // depending on success
                        onSignupSuccess();
                        // onSignupFailed();
                        progressDialog.dismiss();
                    }
                }, 3000);*/
    }

    public void onSignupSuccess() {
        Toast.makeText(getBaseContext(), "Signup Successful", Toast.LENGTH_LONG).show();
        _signupButton.setEnabled(true);
        setResult(RESULT_OK, null);
        finish();
    }

    public void onSignupFailed() {
        Toast.makeText(getBaseContext(), "Signup Failed", Toast.LENGTH_LONG).show();
        _signupButton.setEnabled(true);
    }

    public boolean validate() {
        boolean valid = true;
        boolean psisequal;

        String name = _nameText.getText().toString();
        String email = _emailText.getText().toString();
        String password = _passwordText.getText().toString();
        String confirmPassword = _confirmPasswordText.getText().toString();

        if (name.isEmpty() || name.length() < 3) {
            _nameText.setError("at least 3 characters");
            valid = false;
        } else {
            _nameText.setError(null);
        }

        if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
            _emailText.setError("enter a valid email address");
            valid = false;
        } else {
            _emailText.setError(null);
        }

        if (password.isEmpty() || password.length() < 4 || password.length() > 10) {
            _passwordText.setError("between 4 and 10 alphanumeric characters");
            valid = false;
        }else {
            _passwordText.setError(null);
        }

        if (password.equals(confirmPassword)){
            _confirmPasswordText.setError(null);
            psisequal = true;
        }else {
            _confirmPasswordText.setError("passwords do not match");
            valid = false;
            psisequal = false;
        }

        return valid;
    }
}

activity_register

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fitsSystemWindows="true"
    android:background="@color/black">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="56dp"
        android:paddingLeft="24dp"
        android:paddingRight="24dp">

        <ImageView android:src="@drawable/logo"
            android:layout_width="wrap_content"
            android:layout_height="72dp"
            android:layout_marginBottom="24dp"
            android:layout_gravity="center_horizontal" />

        <!--  Name Label -->
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:textColor="#ffffff"
            android:textColorHint="#ffffff">
            <EditText android:id="@+id/input_name"
                android:theme="@style/MyEditTextTheme"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textCapWords"
                android:hint="Trainer Name (Gamer Tag)" />
        </android.support.design.widget.TextInputLayout>

        <!-- Email Label -->
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:textColor="#ffffff"
            android:textColorHint="#ffffff">
            <EditText android:id="@+id/input_email"
                android:theme="@style/MyEditTextTheme"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textEmailAddress"
                android:hint="E-Mail Address" />
        </android.support.design.widget.TextInputLayout>

        <!-- Password Label -->
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:textColor="#ffffff"
            android:textColorHint="#ffffff">
            <EditText android:id="@+id/input_password"
                android:theme="@style/MyEditTextTheme"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:hint="Password"/>
        </android.support.design.widget.TextInputLayout>

        <!-- Confirm Password Label -->
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:textColor="#ffffff"
            android:textColorHint="#ffffff">
            <EditText android:id="@+id/input_confirmPassword"
                android:theme="@style/MyEditTextTheme"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:hint="Confirm Password"/>
        </android.support.design.widget.TextInputLayout>

        <!-- Signup Button -->
        <android.support.v7.widget.AppCompatButton
            android:id="@+id/btn_signup"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:layout_marginBottom="24dp"
            android:padding="12dp"
            android:text="Create Account"/>

        <TextView android:id="@+id/link_login"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="24dp"
            android:text="Already a member? Login"
            android:textColor="#ffffff"
            android:gravity="center"
            android:textSize="16dip"/>

    </LinearLayout>
</ScrollView>

弦乐

<resources xmlns:android="http://schemas.android.com/tools">
    <string name="app_name">The World of Go</string>
    <string name="title_activity_maps">Map</string>
    <!--CODE FOR BUTTON OVERLAY-->
    <string name="Popular"></string>
    <string name="AZ"></string>
    <string name="Category"></string>
    <string name="NearBy"></string>
    <color name="bg_color">#ffffff</color>
    <color name="black">#222222</color>
    <color name="white">#ffffff</color>
    <style name="MyEditTextTheme">
        <item name="colorControlNormal">#ffffff</item>
        <item name="colorControlActivated">#ffffff</item>
        <item name="colorControlHighlight">#ffffff</item>
        <item name="colorAccent">@android:color/white</item>
        <item name="android:textColor">#ffffff</item>
        <item name="android:textColorHint">#ffffff</item> />
    </style>

    <string name="type_prompt">Choose a Type</string>
    <string-array name="type_arrays">
        <item>Pokestop</item>
        <item>Gym</item>
    </string-array>
</resources>
急速的3642

好吧,我不知道这是否是处理此问题的唯一方法,但是为了解决这个问题,我将布局从线性布局切换为网格布局,并在密码字段中添加了我的OWN图标NEXT,并为图像创建了一个侦听器做同样的事情。但是,通过切换到网格布局,看来我现在丢失了验证错误图标,我在这里问了这个问题,希望可以得到答案:https : //stackoverflow.com/questions/39290052/android-validation-icon-does-not -appear

新外观图片

代码更改如下,
不需要修改Strings.xml。
相反,实现了网格布局,并在密码字段中添加了下一个单独的图像。
activity_register.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android.support.design="http://schemas.android.com/tools"
    android:fitsSystemWindows="true"
    android:background="@color/black">

    <GridLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="56dp"
        android:paddingLeft="24dp"
        android:paddingRight="24dp"
        android:orientation="vertical">

        <ImageView android:src="@drawable/logo"
            android:layout_height="72dp"
            android:layout_marginBottom="24dp"
            android:layout_column="0"
            android:layout_row="0"
            android:layout_columnSpan="2" />

        <!--  Name Label -->
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:textColor="#ffffff"
            android:textColorHint="#ffffff"
            android:layout_column="0"
            android:layout_row="1"
            android:layout_gravity="fill_horizontal"
            android:layout_columnSpan="2">
            <EditText android:id="@+id/input_name"
                android:theme="@style/MyEditTextTheme"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="textCapWords"
                android:hint="Trainer Name (Gamer Tag)" />
        </android.support.design.widget.TextInputLayout>

        <!-- Email Label -->
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:textColor="#ffffff"
            android:textColorHint="#ffffff"
            android:layout_column="0"
            android:layout_row="2"
            android:layout_gravity="fill_horizontal"
            android:layout_columnSpan="2">
            <EditText android:id="@+id/input_email"
                android:theme="@style/MyEditTextTheme"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:maxLength="60"
                android:inputType="textEmailAddress"
                android:hint="E-Mail Address" />
        </android.support.design.widget.TextInputLayout>

        <!-- Password Label -->
        <android.support.design.widget.TextInputLayout
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:textColor="#ffffff"
            app:passwordToggleEnabled="false"
            android:textColorHint="#ffffff"
            android:layout_column="0"
            android:layout_row="3"
            android:layout_gravity="fill_horizontal">
            <EditText android:id="@+id/input_password"
                android:theme="@style/MyEditTextTheme"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:maxLength="20"
                android:inputType="textPassword"
                android:hint="Password" />
        </android.support.design.widget.TextInputLayout>

        <!-- Confirm Password Label -->
        <android.support.design.widget.TextInputLayout
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:textColor="#ffffff"
            app:passwordToggleEnabled="false"
            android:textColorHint="#ffffff"
            android:layout_column="0"
            android:layout_row="4"
            android:layout_gravity="fill_horizontal">
            <EditText android:id="@+id/input_confirmPassword"
                android:theme="@style/MyEditTextTheme"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:maxLength="20"
                android:inputType="textPassword"
                android:hint="Confirm Password"/>
        </android.support.design.widget.TextInputLayout>

        <!-- Signup Button -->
        <android.support.v7.widget.AppCompatButton
            android:id="@+id/btn_signup"
            android:gravity="fill_horizontal"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            android:layout_marginBottom="24dp"
            android:padding="12dp"
            android:text="Create Account"
            android:layout_column="0"
            android:layout_row="5"
            android:layout_columnSpan="2"
            android:layout_gravity="fill_horizontal"
            android:textAlignment="center" />

        <TextView android:id="@+id/link_login"
            android:gravity="fill_horizontal"
            android:layout_height="wrap_content"
            android:layout_marginBottom="24dp"
            android:text="Already a member? Login"
            android:textColor="#ffffff"
            android:textSize="16dip"
            android:layout_column="0"
            android:layout_row="6"
            android:layout_columnSpan="2"
            android:layout_gravity="fill_horizontal"
            android:textAlignment="center" />

        <!-- Icon added here for Password Toggle for Password field -->
        <ImageView
            android:id="@+id/fragment_login_password_visibility"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:clickable="true"
            android:src="@drawable/eye"
            android:layout_row="3"
            android:layout_column="1"
            android:foregroundGravity="center_vertical"
            android:layout_gravity="center_vertical" />

      <!-- Icon added here for Password Toggle for Confirm Password field-->
        <ImageView
            android:id="@+id/fragment_login_confirm_password_visibility"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:clickable="true"
            android:src="@drawable/eye"
            android:layout_row="4"
            android:layout_column="1"
            android:foregroundGravity="center_vertical"
            android:layout_gravity="center_vertical" />

    </GridLayout>
</ScrollView>

RegisterActivity

public class RegisterActivity extends AppCompatActivity {
    private static final String TAG = "RegisterActivity";

    @InjectView(R.id.input_name) EditText _nameText;
    @InjectView(R.id.input_email) EditText _emailText;
    @InjectView(R.id.input_password) EditText _passwordText;
    @InjectView(R.id.fragment_login_password_visibility) ImageView _passwordToggle;
    @InjectView(R.id.fragment_login_confirm_password_visibility) ImageView _confirmPasswordToggle;
    @InjectView(R.id.input_confirmPassword) EditText _confirmPasswordText;
    @InjectView(R.id.btn_signup) Button _signupButton;
    @InjectView(R.id.link_login) TextView _loginLink;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        ButterKnife.inject(this);
        //_passwordToggle.setVisibility(View.GONE);
        //_confirmPasswordToggle.setVisibility(View.GONE);

        _signupButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signup();
            }
        });

        _loginLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Finish the registration screen and return to the Login activity
                finish();
            }
        });

        //Code added HERE for handling the text change for the password icon, I decided not to make the icon disappear if there is no text in the input field but if you choose to do so then uncomment the functional code below.
        _passwordText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                //_passwordToggle.setVisibility(s.length() > 0 ? View.VISIBLE : View.GONE);
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                //_passwordToggle.setVisibility(s.length() > 0 ? View.VISIBLE : View.GONE);
            }
        });
        _passwordToggle.setOnTouchListener(mPasswordVisibleTouchListener);

        _confirmPasswordText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                //_passwordToggle.setVisibility(s.length() > 0 ? View.VISIBLE : View.GONE);
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                //_confirmPasswordToggle.setVisibility(s.length() > 0 ? View.VISIBLE : View.GONE);
            }
        });
        _confirmPasswordToggle.setOnTouchListener(mConfirmPasswordVisibleTouchListener);
    }

    private View.OnTouchListener mPasswordVisibleTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            final boolean isOutsideView = event.getX() < 0 ||
                    event.getX() > v.getWidth() ||
                    event.getY() < 0 ||
                    event.getY() > v.getHeight();

            // change input type will reset cursor position, so we want to save it
            final int cursor = _passwordText.getSelectionStart();

            if (isOutsideView || MotionEvent.ACTION_UP == event.getAction())
                _passwordText.setInputType( InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_PASSWORD);
            else
                _passwordText.setInputType( InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

            _passwordText.setSelection(cursor);
            return true;
        }
    };

    private View.OnTouchListener mConfirmPasswordVisibleTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            final boolean isOutsideView = event.getX() < 0 ||
                    event.getX() > v.getWidth() ||
                    event.getY() < 0 ||
                    event.getY() > v.getHeight();

            // change input type will reset cursor position, so we want to save it
            final int cursor = _confirmPasswordText.getSelectionStart();

            if (isOutsideView || MotionEvent.ACTION_UP == event.getAction())
                _confirmPasswordText.setInputType( InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_PASSWORD);
            else
                _confirmPasswordText.setInputType( InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

            _confirmPasswordText.setSelection(cursor);
            return true;
        }
    };
    //End of NEW code changes

    public void signup() {
        Log.d(TAG, "Begin Signup process...");

        if (!validate()) {
            onSignupFailed();
            return;
        }

        _signupButton.setEnabled(false);

        final ProgressDialog signupProgressDialog = new ProgressDialog(RegisterActivity.this,
                R.style.Theme_IAPTheme);
        signupProgressDialog.setIndeterminate(true);
        signupProgressDialog.setMessage("Creating Account...");
        signupProgressDialog.show();

        String name = _nameText.getText().toString();
        String email = _emailText.getText().toString();
        String password = _passwordText.getText().toString();
        String confirmPassword = _confirmPasswordText.getText().toString();

        // TODO: Implement your own signup logic here.

        Response.Listener<String> responseListener = new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    Log.i("tagconvertstr", "["+response+"]");
                    JSONObject jsonResponse = new JSONObject(response);
                    boolean success = jsonResponse.getBoolean("success");
                    if (success) {
                        onSignupSuccess();
                    } else {
                        onSignupFailed();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        };

        RegisterRequest registerRequest = new RegisterRequest(name, email, password, responseListener);
        RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
        queue.add(registerRequest);

        /*new android.os.Handler().postDelayed(
                new Runnable() {
                    public void run() {

                        // On complete call either onSignupSuccess or onSignupFailed
                        // depending on success
                        onSignupSuccess();
                        // onSignupFailed();
                        progressDialog.dismiss();
                    }
                }, 3000);*/
    }

    public void onSignupSuccess() {
        Toast.makeText(getBaseContext(), "Signup Successful", Toast.LENGTH_LONG).show();
        _signupButton.setEnabled(true);
        setResult(RESULT_OK, null);
        finish();
    }

    public void onSignupFailed() {
        Toast.makeText(getBaseContext(), "Signup Failed", Toast.LENGTH_LONG).show();
        _signupButton.setEnabled(true);
    }

    public boolean validate() {
        boolean valid = true;

        Drawable errorIcon = getResources().getDrawable(R.drawable.eye);
        errorIcon.setBounds(new Rect(0, 0, 100, 100));


        String name = _nameText.getText().toString();
        String email = _emailText.getText().toString();
        String password = _passwordText.getText().toString();
        String confirmPassword = _confirmPasswordText.getText().toString();

        //Trainer Name validation
        if (name.isEmpty() || name.length() < 3) {
            _nameText.setError("enter at least 3 characters", errorIcon);
            valid = false;
        } else {
            _nameText.setError(null);
        }

        //E-Mail validation
        if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
            _emailText.setError("enter a valid email address");
            valid = false;
        } else {
            _emailText.setError(null);
        }

        //Password validation
        if (password.isEmpty() || password.length() < 4 || password.length() > 10) {
            _passwordText.setError("between 4 and 20 alphanumeric characters");
            valid = false;
        }else {
            _passwordText.setError(null);
        }

        //Confirm Password validation
        if (password.equals(confirmPassword)){
            _confirmPasswordText.setError(null);
        }else {
            _confirmPasswordText.setError("passwords do not match");
            valid = false;
        }

        return valid;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Android IDE中移动文件

来自分类Dev

如何在Android中移动多个视图?

来自分类Dev

如何在libgdx / android中移动圈子?

来自分类Dev

如何在Android中移动Mapsforge图层(标记)

来自分类Dev

如何在单个画布Android中移动多个位图

来自分类Dev

如何在android studio中移动(上/下)代码行?

来自分类Dev

如何在视图组(Android)中移动视图?

来自分类常见问题

如何在Pygame中移动矩形

来自分类Dev

如何在MFC中移动窗口?

来自分类Dev

如何在Eigen中移动矩阵?

来自分类Dev

如何在QtDesigner中移动项目?

来自分类Dev

如何在类型列表中移动类型?

来自分类Dev

如何在输入字段中移动文本?

来自分类Dev

如何在多维数组中移动元素?

来自分类Dev

如何在Realm中移动对象

来自分类Dev

如何在flexbox中移动项目?

来自分类Dev

如何在pygame中移动时射击

来自分类Dev

如何在pywinauto中移动UIAWrapper窗口?

来自分类Dev

如何在QAbstractItemView中移动QWidget?

来自分类Dev

如何在Pygame中移动矩形

来自分类Dev

如何在Pygame中移动表面

来自分类Dev

如何在GNU屏幕中移动窗口

来自分类Dev

如何在bash中移动数组值

来自分类Dev

如何在Eigen中移动矩阵?

来自分类Dev

iOS:如何在UIImageView中移动图像

来自分类Dev

JavaFX:如何在GridPane中移动元素?

来自分类Dev

如何在xml中移动图像视图

来自分类Dev

如何在Git中移动多个目录?

来自分类Dev

如何在GNU / Linux中移动分区?