How to change the default behaviour of Android Studio - android

Can we change the default Build behavior of Android Studio from Constraint to Relative Layout?
Problem: Sometimes it takes more time to Clean/Rebuild my project. And I never use Constraint Layout, so I want to set the build behavior of Android Studio from Constraint Layout to Relative Layout.
I want every-time I open AS, it should open Relative. Is it possible to achieve?

Make default layout to Relative for current project
First open your .xml file and change your constraint layout to relative layout. Then go to the top menu of your Android Studio with a project open. Then go to "Window" tab, Then select "Store Current Layout as default". If the default is not what you like, download a layout you would like as default and set it as your default layout.
Make default layout to Relative for all projects
Just modify the template layout file which is present in android studio resources
C:\Program Files\Android\Android Studio\plugins\android\lib\templates\activities\common\root\res\layout
Now edit this file simple.xml.ftl and change layout to your choice(Note. for making default relative just copy below code in your simple.xml.ftl file), notice that some layouts require additional elements (e. g. LinearLayout needs android:orientation), save file and create activity in Android Studio, it should work.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
<#if hasAppBar && appBarLayoutName??>
xmlns:app="http://schemas.android.com/apk/res-auto"
</#if>
android:id="#+id/${simpleLayoutName}"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="#dimen/activity_horizontal_margin"
android:paddingRight="#dimen/activity_horizontal_margin"
android:paddingTop="#dimen/activity_vertical_margin"
android:paddingBottom="#dimen/activity_vertical_margin"
<#if hasAppBar && appBarLayoutName??>
app:layout_behavior="#string/appbar_scrolling_view_behavior"
tools:showIn="#layout/${appBarLayoutName}"
</#if>
tools:context="${relativePackage}.${activityClass}">
<#if isNewProject!false>
<TextView
<#if includeCppSupport!false>
android:id="#+id/sample_text"
</#if>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</#if>
</RelativeLayout>

Keep in mind if you modify the simple.xml, the android studio updater will detect a conflict and prevent applying the update. Keep your copy :)

Quite Easy - just in 3 steps
Goto C:\Program Files\Android\Android Studio\plugins\android\lib\templates\activities\common\root\res\layout
Backup simple.xml.ftl
Modify simple.xml.ftl to below code and save it
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${packageName}.${activityClass}">
<TextView
android:id="#+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Sample"
android:textSize="16sp" />
</RelativeLayout>
Tried and tested on Windows 10 build:gradle:3.0.1
Works for every new activity in the same project and for future projects as well.
Note: Need to modify the simple.xml.ftl file with Admin rights
For this to work out you don't need to edit layout > New > Edit File Templates... your layoutResourceFile and layoutResourceFile_vertical by removing the ${ROOT_TAG} - as I have already tried but that doesn't work.

Related

Fresh Android studio project many errors

I've wanted to learn how to build apps and I found a course online that explains what to do. for that course I downloaded java jdk and android studio and I installed everything on default settings. from there I opened up a new project with blank page, and I got like 9 errors and the preview is not working as well. all my friends are not having this problem I don't know why I am. Here's the code:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Home"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schemas.android.com/tools
http://schemas.android.com/apk/res/android
http://schemas.android.com/apk/res/android ">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
The errors I get are:
"URI is no registered" (on the first 3 lines)
"Android_Width/Height/Tools is not allowed here" (thats 3 errors)
"Cannot resolve Symbol http://schemas.android.com/apk/res/android"
"Element textview is not allowed here"
Can someone please explain and help me solve this? I want to start building and learning but I cant seem to find the problem in here..
Also I tried reinstalling, re opening a project, adding the uri's to the schemas % dtd list and checking if I opened the debugging xml by mistake. the file is "activity_main.xml".
Thanks in advance :)
Have you declared constraint layout on app/build.gradle ?
1.Ensure you have the maven.google.com repository declared in your module-level
build.gradle file:
repositories {
google()
}
2.Add the library as a dependency in the same build.gradle file, as shown in the example below. Note that the latest version might be different than what is shown in the example:
dependencies {
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
}
3.In the toolbar or sync notification, click Sync Project with Gradle Files.
reference
when removing all the useless clutter, it should work:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
the definition of xsi:schemaLocation had duplicate and wrongful entries.

CoordinatorLayout element isn't declared

I'm a bit new to programming so bear with me. I'm trying to create a FAB menu by following ResoCoder's tutorial on youtube, but there's an issue with the CoordinatorLayout element being declared.
It throws this warning:
The 'android.support.design.widget.CoordinatorLayout' is not declared.
Here's the AXML file.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Hello FAB menu!"
android:textSize="24sp"/>
<View
android:id="#+id/bg_fab_menu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#48000000"
android:alpha="0"
android:visibility="gone"/>
<android.support.design.widget.FloatingActionButton
android:id="#+id/fab_airballoon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="#dimen/standard_23"
android:visibility="gone"
android:rotation="90"
app:fabSize="mini"
app:srcCompat="#drawable/ic_airballoon"/>
</android.support.design.widget.CoordinatorLayout>
And here is an image of the warning.
Warning
edit:
This is now showing on the 'Designer' tab
Error on designer tab
Short Answer :
It's just a warning and not an error, you could compile your project without any problem.
Long Answer :
The problem is that the Intellisense could not pick the attributes you type although those attributes did exists in android SDK. So the Visual Studio shows that :
The 'android.support.design.widget.CoordinatorLayout' is not declared.
To solve this problem, you should enable Intellisense in Android .axml files. But a little difference with the document, you could download android-layout-xml.xsd and schemas.android.com.apk.res.android.xsd file from the following link :
https://github.com/atsushieno/monodroid-schema-gen/blob/master/android-layout-xml.xsd
https://github.com/atsushieno/monodroid-schema-gen/blob/master/schemas.android.com.apk.res.android.xsd
Download the file and edit the android-layout-xml.xsd and add the ConstraintLayout element. Then move these file manually to :
C:\Program Files (x86)\Microsoft Visual Studio 14.0\XML\Schemas\1033
Or simply just add these schemas within Visual Studio. Restart your VS, this warning will be gone
Suggestion :
It is recommend that ignoring the warning, you could compile your project without any problem.
Update :
Otherwise, after compiling I get errors like: 'Error: No resource found that matches the given name (at 'layout_margin' with value '#dimen/standard_23').' Which I assume are because of the CoordinatorLayout not being declared.
The dimen attribute need you create on yourself, make sure you copied the dimens.xml file too. You need create the dimens.xml in Resource\values\dimens.xml, define the standard_23 size in this file. Then the compile could find the standard_23 size.
dimen.xml :
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<dimen name="action_button_min_width">56dp</dimen>
<dimen name="indeterminate_progress_size">32dp</dimen>
<dimen name="standard_23">23dp</dimen>
</resources>

uri is not registered http://schemas.android.com/apk/res/android

I am getting uri is not registered on my code.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ProgressBar
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:id="#+id/progressBar1"/>
<WebView
android:id="#+id/webview01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1">
</WebView>
</LinearLayout>
I have created a dir tabdir under the main/res/layout. and want to create xml file in tabdir.
If you create a sub directory, android studio will not recognize it as a standard resource directory. You can see the effect by changing project explorer mode from 'Project' to 'Android' in Android Studio.
Well, if you need to create a subdirectory, follow this SO thread.
Or a quickfix to your error is to move your layout file to the main/res/layout directory.
New layout folders have to be added to sourceSet, otherwise the schemas won't be recognized. Here how to do it for gradle guys:
project grade file
sourceSets {
main {
//add folders following order from leafs to root.
res.srcDirs = [
'src/main/res/layouts/layout_controls/layout_new_control',
'src/main/res/layouts/layout_controls',
'src/main/res/layouts/layout_main',
'src/main/res']
}
Each folder declared must have at least a sub folder named layout.
Other sub folders may be added to hold different type of resources for the new source the same way there are sub folders to res folder, e.g. values sub folder can be added to hold strings translations in a strings.xml file.
The content of layout_new_control folder would be something like:
-- layout
new_control.xml
-- values
strings.xml
The errors will only disappear after compile.
For more check this guide.

Code completion does not work for External Library XML attributes (Android Studio)

I am using Android Studio 1.1 RC 1.
I've imported an external library into Gradle:
compile 'com.rengwuxian.materialedittext:library:1.8.3'
I've added the namespace tag:
xmlns:app="http://schemas.android.com/apk/res-auto"
into the parent as below:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#color/primary_light"
android:orientation="vertical"
android:padding="20dp"
tools:context="net.xxx.xxx.ui.activities.Activity"/>
I get code completion for the custom views within the library i.e.:
<com.rengwuxian.materialedittext.MaterialAutoCompleteTextView />
But nothing comes up when I try code completion for the attributes for this view. I have to type all this in manually.
<com.rengwuxian.materialedittext.MaterialAutoCompleteTextView
android:id="#+id/autocomplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="3"
android:hint="Enter name"
android:imeOptions="actionDone"
app:floatingLabel="normal"
app:floatingLabelText="Find xxx"/>
Is there a setting or import that I'm missing?
Helpful Info:
The attribute file in the library can be found here.
https://github.com/rengwuxian/MaterialEditText/blob/master/library/src/main/res/values/attrs.xml
I had the same issue. But I have solved it.
Go File > Invalidate Caches / Restart... > Click at Invalidate and Restart
It's an efficient way. You can try.
Source: Android Studio - Auto complete and other features not working
Note: Here are some other approaches too. Have a look.

Namespace is not Bound in Android Studio

If I create a new XML-file (using the default Android Studio "Create Linear Layout"), Studio makes a file with content:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
If I (right)-click "Analyze... → Inspect Code" the result window throws 2 times:
"Namespace is not bound" and references to line 3 and 7 (the LinearLayout-tags). Is it a bug in Studio?
If you get the error:
Namespace 'tools' is not bound:
Example:
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:theme="#android:style/Theme.NoTitleBar.Fullscreen"
tools:replace="android:theme"
/>
Add xmlns:tools="http://schemas.android.com/tools" at the top of the manifest (or activity).
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage"
xmlns:tools="http://schemas.android.com/tools">
You must copy everything except the first line <?xml version="1.0" encoding="utf-8"?> from your xml file, create a new xml layout file and erase everything but the first line, then paste the copied content into the new file below the first line. Then you use the new layout file instead of the old one.
Note: This is just my interpretation of leo's answer, I don't know if it works or not and cannot test it because I don't have the same problem as you guys.
try this:
in android studio 2.2.3 press F2 to jump between the warning then press Alt+Enter; this created the following reference:
xmlns:app="http://schemas.android.com/apk/res-auto"
and fixed the issue.
Moreover, I checked my XML files and all have this encoding version:
?xml version="1.0" encoding="utf-8"?
Add:
xmlns:app="http://schemas.android.com/apk/res-auto"
to yor manifest tag
I just added in the xml on the root widget this line:
xmlns:tools="http://schemas.android.com/tools"
An example of this is:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent">
then you can use attributes like:
tools:text="+52"

Categories

Resources